Big Cheese wrote:Любопытно, что у меня и, насколько я могу судить, не только у меня сложилось мнение о spinlock'ed CS, как о способе сделать high contention lock масштабируемым. Что при внимательном рассмотрении оказывается не совсем соответствующим действительности. Хотя, с другой стороны - если количество потоков в системе в разы превышает количество процессоров, то такая система, видимо, сама по себе плохо масштабируется.
Проблема масштабируемости критической секции ведь не сводится только к конвоям? В случаях, когда доступ к критической секции имеет нерегулярный характер или когда за кририческую секцию конкурирует много потоков, но потокам она не нужна много раз в течение кванта, а также когда время, на которое захватывается CS очень маленькое (скажем, порядка или меньше времени переключения контекста), то правильно подобранный spincount может заметно снизить CPU utillization как раз в правильных случаях, когда количество потоков не очень сильно превышает количество процессоров.