Re[5]: Memory barrier не могу понять что это
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 06.04.23 07:56
Оценка:
Здравствуйте, Философ, Вы писали:

Ф>И тем не менее достичь этого легко: даже Thread.SpinWait(Int32) используется частенько. Достичь 100К итераций ожидания не так сложно как тебе кажется.


Ну да, если вставлять, где ни попадя, то легко. Если хоть немного с умом (то есть, сообразуясь с реальной потребностью), то достаточно сложно.

ЕМ>>Какие высокоуровневые примитивы синхронизации обходятся без походов в ядро?


Ф>Ну например SpinLock


Он только с виду "высокоуровневый". Внутри там примитивный цикл из InterlockedCompareExchange (которая раскрывается в команду CmpXchg), InterlockedIncrement/InterlockedDecrement (которые раскрываются в lock xadd), или чего-то подобного. Реально же высокоуровневые примитивы, подразумевающие ожидание с переключением потоков, без походов в ядро не реализуемы.

Ф>если повезёт, то например ManualResetEventSlim тоже может на ожидании без походов в ядро обойтись.


И это на той же технике, как и критические секции со spin count. Как раз костыли для тех, кто их использует бездумно, "по учебнику".
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.