kel: 1) Interlocked-функции - http://rosigma.com/82.aspx: Другой важный аспект, связанный с Interlocked-функциями, состоит в том, что они выполняются чрезвычайно быстро. Вызов такой функции обычно требует не более 50 тактов процессора, и при этом не происходит перехода из пользовательского ре жима в режим ядра (а он отнимает не менее 1000 тактов).
2) Критические секции - wenth.doc, lecture.ppt: Критические секции используются для атомарного исполнения участка кода при доступе к разделяемому ресурсу. Операции с критическими секциями:
1. инициализация критической секции,
2. вход в критическую секцию (возможно несколько раз для одного потока):
3. с ожиданием при неудаче,
4. без ожидания при неудаче,
5. выход из критической секции,
6. удаление критической секции.
3) Мьютексы - http://www.realcoding.net/article/view/1286: объекты ядра, которые создаются функцией CreateMutex(). Мьютекс бывает в двух состояниях - занятом и свободном. Мьютексом хорошо защищать единичный ресурс от одновременного обращения к нему разными потоками.
4) Семафоры - http://www.realcoding.net/article/view/1286: очень похож на мьютекс, только в отличие от него у семафора есть счетчик. Семафор открыт если счетчик больше 0 и закрыт, если счетчик равен 0. Семафором обычно “огораживают” наборы равнозначных ресурсов (элементов), например очередь, список и т.п.
Цитаты вообще:
http://wm-help.net/books-online/book/59464/59464-28.html: мьютекс - быстродействие малое, обьект — критическая секция - высокое.
Критическая секция - «Легковесный мьютекс»
Из вышесказанного ясно: interlocked → крит. секция → (тут сложнее) мьютекс → семафор
Думаю всё-так сначала мьютекс по 2 причинам (читал много где, поэтом ссылки не выкладываю):
1 - семафор - дальнейшее обобщение (можно сказать даже расширение)мьютекса
2 - мьютекс захватывается потоком, а семафор должен предоставлять ресурс нескольким потокам