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

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

Изменено 19.02.2019 12:01 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, что больше похоже на указатель, чем на значение.


Оно там для вырванивания с /Za1, даже комментарий есть, значение явно в младшей части спин каунт.

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