Здравствуйте, AlexGin, Вы писали:
AG>Всё зависит от задач.
AG>Я обычно мьютексы не использую, так как это "тяжёлые" системные объекты.
AG>Насчет критических секций — не вижу ничего предосудительного в их применении.
AG>Часто я аккуратно пользуюсь ими. Здесь важно — НЕ вводить в облась, защищенную секцией много кода:
AG>AG>::EnterCriticalSection(m_pCS);
AG>// Самые элементарные действия с общими ресурсами
AG>::LeaveCriticalSection(m_pCS);
AG>
Ну и зря. Под Windows, внутри Microsoft CRT, std::mutex не имеет ничего общего с WinAPI Mutex. Там, грубо, простой test_and_set, без захода в ядро.
AG>Заполнять ядра CPU работой — это палка о двух концах:
AG>При работе таких приложений, компьютер очень медленно реагирует на действия пользователя.
AG>Правильнее — где-то в циклах рабочих потоков вводить ::Sleep(100...500);
AG> — чтобы отдать управление системе (исключить жуткие тормоза для end-user-а).
Вот ни разу не встречал такого (только если не долбиться с тяжелым запросом в ядро в цикле). Всегда свои программы профилировали чтобы загрузка СPU была 100%. Если меньше, значит где-то холостые ожидания — значит код не оптимален, с точки зрения многопоточности.