Показать сообщение отдельно
Старый 01.04.2014, 23:24   #12
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: Синтаксис: at&t vs intel

Для некоторых решений атомарность не принципиальна. Например: не блокируемый цикл, условием выхода из которого является гарантированно однократная смена состояния флага. При этом цикл не обязательно спинблок в чистом виде (например, есть полезная нагрузка с требованием постоянного выполнения). Данный подход может быть оправдан при выполнении цикла на гарантированно отдельном ядре (а не за счёт разделения ресурсов одного ядра). Т.о. мы уверены, что спинблок не повлияет критично на поток, занимающийся управлением флагом.
Если же это спинблок, то требования к быстродействию (нет времени на переключение в режим ядра и адекватный сон) и/или малая вероятность захвата флага другим синхронизированным потоком, могут опять-таки оправдать использование обычного флага с volatile как примитива синхронизации. Правда, для последнего существуют (как обёртка) критические секции, которые (в отличие от семафоров) как раз первично* в режиме пользователя работают. Даже готовый метод есть - InitializeCriticalSectionAndSpinCount, и не менее удобный TryEnterCriticalSection (который на мьютексах делается костылём в виде ожидания в 0 мс).

А чо-чо в новом стандарте, вроде, какие-то подвижки по поводу стандартизации работы с мп были, не?
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием