true,то владение мьютексом запрашивается. Но поскольку мьютекс может принадлежать другому процессу на системном уровне, то для этого параметра лучше указать логическое значениеfalse.А после возврата из второй формы конструктора параметрcreatedNewбудет иметь логическое значениеtrue,если владение мьютексом было запрошено и получено, и логическое значениеfalse,если запрос на владение был отклонен. Существует и третья форма конструктора типаMutex,в которой допускается указывать управляющий доступом объект типаMutexSecurity.С помощью именованных мьютексов можно синхронизировать взаимодействие процессов.

И последнее замечание: в потоке, получившем мьютекс, допускается делать один или несколько дополнительных вызовов метода Wait One () перед вызовом метода ReleaseMutex (), причем все эти дополнительные вызовы будут произведены успешно. Это означает, что дополнительные вызовы метода Wait One () не будут блокировать поток, который уже владеет мьютексом. Но количество вызовов метода Wait One () должно быть равно количеству вызовов метода ReleaseMutex () перед освобождением мьютекса.

Семафор

Семафорподобен мьютексу, за исключением того, что он предоставляет одновременный доступ к общему ресурсу не одному, а нескольким потокам. Поэтому семафор пригоден для синхронизации целого ряда ресурсов. Семафор управляет доступом к общему ресурсу, используя для этой цели счетчик. Если значение счетчика больше нуля, то доступ к ресурсу разрешен. А если это значение равно нулю, то доступ к ресурсу запрещен. С помощью счетчика ведется подсчет количестваразрешений.Следовательно, для доступа к ресурсу поток должен получить разрешение от семафора.

Обычно поток, которому требуется доступ к общему ресурсу, пытается получить разрешение от семафора. Если значение счетчика семафора больше нуля, то поток получает разрешение, а счетчик семафора декрементируется. В противном случае поток блокируется до тех пор, пока не получит разрешение. Когда же потоку больше не требуется доступ к общему ресурсу, он высвобождает разрешение, а счетчик семафора инкрементируется. Если разрешения ожидает другой поток, то он получает его в этот момент. Количество одновременно разрешаемых доступов указывается при создании семафора. Так, если создать семафор, одновременно разрешающий только один доступ, то такой семафор будет действовать как мьютекс.

Перейти на страницу:

Похожие книги