Допустим, у меня есть общий объект, часть кода которого защищена критическим разделом, и более 1 потока обращаются к объекту для чтения/записи. Когда поток находится внутри критической секции, другие потоки ждут. Как только поток выходит из CS, ОС предоставляет доступ к любому из ожидающих потоков.
Если я ограничен только одним процессом, является ли CS хорошей защитой для общего объекта?
Я спрашиваю, потому что я видел в Интернете, что правильный способ сделать это — использовать объект ядра (например, мьютекс, семафон) для защиты CS. Поток, желающий использовать общий ресурс, должен сначала получить мьютекс/семафор с помощью функции типа WaitForSingleObject. Если используется мьютекс, то только один из них может получить доступ к ресурсу. Как только мьютекс получен, поток входит в CS, делает то, что должен делать, затем выходит из CS и освобождает мьютекс. Затем ОС позволяет любому другому ожидающему потоку получить мьютекс и так далее и тому подобное.
Но разве это не то же самое, что использовать только CS?
Кроме того, использование мьютекса должно быть значительно медленнее, чем использование одного CS. Единственная проблема, которую я вижу при использовании только CS, заключается в том, что если поток выходит из строя внутри CS, другие потоки могут никогда не получить доступ к общему ресурсу.
Есть ли другая причина, по которой этот подход лучше? заранее спасибо