Показать сообщение отдельно
Старый 03.08.2014, 19:53   #2908
Paul Kellerman
Gold Member
 
Регистрация: 25.06.2005
Адрес: F000:FFF0
Сообщений: 1,830
По умолчанию

kravets, стандартная функция ожидания объекта синхронизации (мьютекса в моем случае).
Во время ожидания процессорное время не тратится, поток отправляется системой в спячку
до того момента, когда либо мьютекс освободится, либо истечет таймаут dt. За мьютексом и
за таймаутом следит ОС, и программист при всем желании никак вмешаться в это не может.
Пока не произошло ни то, ни другое, ОС предоставляет процессорное время другим потокам.
Средняя загрузка процессора потоками, участвующих в процессе моделировании, менее 1%.
А все потому что даже когда поток захватывает мьютекс и получает доступ к ресурсу, он не
тратит процессорное время, а просто вызывает функцию Sleep с заданным таймаутом, ими-
тируя некоторые действия с ресурсом с некоторой длительностью, а реально просто спит,
мьютекс при этом захвачен этим потоком, а остальные потоки спят, сидя в Wait-функции.
Короче, все потоки практически всё время "спят", включая поток, захвативший мьютекс.
Paul Kellerman вне форума  
Реклама