Мьютекс в Win32 - это объект ядра, что означает, что при каждом его использовании (Wait
, Release
) требуется системный вызов, который переключается в режим ядра и обратно в режим пользователя. Плюс, если ваш поток действительно должен ждать мьютекс, он теряет свой квант, в то время как другой поток, который может работать, запланирован на ЦП. В WinXP и более ранних версиях (и, возможно, в некоторых более поздних версиях Windows) мьютексы были «честными», что означает, что если ваш поток последним ожидал мьютекс, он был бы последним, чтобы получить его, что еще больше увеличивает вероятность конфликта.
Причины использования мьютекса в том, что вы можете легко обмениваться ими между процессами, вы можете получать уведомления об уничтожении потока, которому он принадлежит, и можете ожидать их вместе с другими объектами, используя WaitForMultipleObjects
.
Обратите внимание, что вы используете их в этом тесте , а не идеальный способ их использования, потому что затраты на приобретение мьютекса намного больше, чем объем работы, которую вы делаете.