Информация об изменениях

Сообщение Re[2]: Критическая секция, как совсем отключить spin count от 19.02.2019 12:00

Изменено 19.02.2019 14:29 Alexander G

Re[2]: Критическая секция, как совсем отключить spin count
Здравствуйте, Nuzhny, Вы писали:

N>Давно уже не трогал WinAPI, но что такое SpinCount?


Если ресурс занят, то перед тем, как ждать в ядре, может быть предпринято некоторое количество попыток проверить, не освободился ли ресурс.
На многопроцессорных/многоядерных системах и для занимаемых на непродолжительное время ресурсов это может улучшить перформанс.
Для продолжительно занимаемых ресурсов от такого больше вреда, чем пользы.
На однопроцессорных/одноядерных системах это бесполезно, и оно не включается.

В книге Рихтера тема раскрыта и в одкументации той же InitializeCriticalSectionAndSpinCount.

N>Тип у него ULONG_PTR, что больше похоже на указатель, чем на значение.


Оно там для выравнивания с /Za1, даже комментарий есть:

typedef struct _RTL_CRITICAL_SECTION {
    ...
    ULONG_PTR SpinCount;        // force size on 64-bit systems when packed
} RTL_CRITICAL_SECTION, *PRTL_CRITICAL_SECTION;


Значение явно в младшей части спин каунт.
Re[2]: Критическая секция, как совсем отключить spin count
Здравствуйте, Nuzhny, Вы писали:

N>Давно уже не трогал WinAPI, но что такое SpinCount?


Если ресурс занят, то перед тем, как ждать в ядре, может быть предпринято некоторое количество попыток проверить, не освободился ли ресурс.
На многопроцессорных/многоядерных системах и для занимаемых на непродолжительное время ресурсов это может улучшить перформанс.
Для продолжительно занимаемых ресурсов от такого больше вреда, чем пользы.
На однопроцессорных/одноядерных системах это бесполезно, и оно не включается.

В книге Рихтера тема раскрыта и в одкументации той же InitializeCriticalSectionAndSpinCount.

N>Тип у него ULONG_PTR, что больше похоже на указатель, чем на значение.


Оно там для выравнивания с /Zp1, даже комментарий есть:

typedef struct _RTL_CRITICAL_SECTION {
    ...
    ULONG_PTR SpinCount;        // force size on 64-bit systems when packed
} RTL_CRITICAL_SECTION, *PRTL_CRITICAL_SECTION;


Значение явно в младшей части спин каунт.