Mutex не с резьбой - PullRequest
       11

Mutex не с резьбой

0 голосов
/ 06 мая 2009

Это ответ на этот вопрос, но с несколькими снятыми ограничениями.

У меня есть система, в которой мне нужно управлять блокировкой файлов. Мне нужно иметь возможность заблокировать файл (общая блокировка чтения) в одном потоке, а затем разблокировать его в другом. Точнее, я не могу быть уверен, в каком потоке он будет разблокирован, или даже в том случае, если поток создания еще существует.

Мне также понадобится эксклюзивная блокировка записи для этого, но все будет в одном потоке.

.NET Mutex не будет работать, поскольку он выполняет дополнительные действия при выходе из потока создания

Ответы [ 3 ]

1 голос
/ 06 мая 2009

Вопрос, с которым вы связались, - это пересечение границ процесса, но из того, что я прочитал, вы только пересекаете потоки ... учитывая это, я думаю, что класс ReaderWriterGate Джеффа Рихтера мог бы соответствовать вашей проблеме. Он позволяет вам контролировать доступ к общему ресурсу и ставить в очередь запросы на доступ к ресурсу. Похоже, что он не имеет никакого сходства потоков, поэтому, если вы не пересекаете границы процесса, это может быть решением для вас.

Вот ссылка на статью о классе ... Параллельные дела , и вы можете скачать PowerThreading Library здесь

Если ваш случай действительно прост (за исключением блокировки из одного потока и освобождения из другого), я не понимаю, почему вы не можете использовать встроенный ReaderWriterLock в .NET (хотя один в библиотеке PowerThreading предполагается намного быстрее). Класс Monitor не имеет привязки к потоку и может быть доступен из любого контекста, поэтому в зависимости от того, как вы его используете, это может быть вашим самым простым решением.

1 голос
/ 06 мая 2009

Может быть (по имени) Семафор со счетом один? WaitOne заблокировать, Release разблокировать?

0 голосов
/ 06 мая 2009

Звучит как проблема Турникет . Вы должны управлять считывателями, которые блокируют файл первым, а последний - разблокировать файл. Вы можете использовать семафор для реализации этого. Вы можете отдать предпочтение автору, попросив запретить читателю турникет, пока писатель ждет.

...