Замки обертання (зайняті замки очікування) більшеефективний, ніж блокатори сну mutex, дуже короткі критичні розділи. Припустимо, що контекст перемикає час для системи (час, який потрібно до зберегти поточний процес і завантажити наступний) - час Т. Скільки часу може критичний розділ бути перед тим, як ефективніше використовувати блокування сну mutex, а не віджим?
Відповіді:
0 для відповіді № 1Це залежить від конкретного випадку. Скільки процесорного часу ви готові спалити на спінінгу, щоб швидше прокинутися?
Колись Intel сказав 20 циклів. Але це було дуже давно в часи на набагато більше ниток, ніж ядер.
Якщо ваша нитка очікування дуже важлива для вас, у неї було б власне виділене ядро, і вам не було б байдуже крутитися назавжди задля остаточного найшвидшого пробудження.
Якщо це менш критично, ніж це, і ядроспільно з іншими потоками, можливо, ви захочете надати процесору час якомусь іншому потоку. Якщо ви цього не зробите, з часом ОС зробить це за вас, але це, очевидно, менше оптимального.
Підсумок - протестуйте та перевірте різницю в продуктивності, а потім повторіть ітерацію, повторне тестування тощо