Здравствуйте, Философ, Вы писали:
Ф>И тем не менее достичь этого легко: даже Thread.SpinWait(Int32) используется частенько. Достичь 100К итераций ожидания не так сложно как тебе кажется.
Ну да, если вставлять, где ни попадя, то легко. Если хоть немного с умом (то есть, сообразуясь с
реальной потребностью), то достаточно сложно.
ЕМ>>Какие высокоуровневые примитивы синхронизации обходятся без походов в ядро?
Ф>Ну например SpinLock
Он только с виду "высокоуровневый". Внутри там примитивный цикл из InterlockedCompareExchange (которая раскрывается в команду CmpXchg), InterlockedIncrement/InterlockedDecrement (которые раскрываются в lock xadd), или чего-то подобного. Реально же высокоуровневые примитивы, подразумевающие ожидание с переключением потоков, без походов в ядро не реализуемы.
Ф>если повезёт, то например ManualResetEventSlim тоже может на ожидании без походов в ядро обойтись.
И это на той же технике, как и критические секции со spin count. Как раз костыли для тех, кто их использует бездумно, "по учебнику".