Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Monitor.Enter/Monitor.Exit 
V
    Опции темы
Idsa
Дата 8.8.2008, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 14
Всего: 62



Мне необходимо заблокировать синхронизационную переменную в одном потоке, а разблокировать - в другом. Насколько я понял, класс Monitor не предназначен для этого (ругается SynchronizationLockException'ом). Как тогда быть? Использовать тяжеловесные объекты ядра?


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
Partizan
Дата 8.8.2008, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 18
Всего: 67



Idsa, эээ...а можете привести конкретную ситуацию, когда такое поведение является желаемым?...


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Idsa
Дата 8.8.2008, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 14
Всего: 62



Цитата(Partizan @  8.8.2008,  14:55 Найти цитируемый пост)
Idsa, эээ...а можете привести конкретную ситуацию, когда такое поведение является желаемым?... 

Это секрет государственной важности :-P
А вообще, что такого дикого в таком поведении? Общий случай: 1. есть много ресурсов, доступ к которым необходимо разрешать/запрещать по определенной логике 2. один из потоков, дойдя до определенной стадии, разрешает доступ к какому-либо ресурсу.



--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
Partizan
Дата 8.8.2008, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 18
Всего: 67



Idsa, похоже здесь больше подойдёт использование мьютексов / семафоров (нужное подчеркнуть)


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Idsa
Дата 9.8.2008, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 14
Всего: 62



Цитата(Partizan @  8.8.2008,  15:26 Найти цитируемый пост)
Idsa, похоже здесь больше подойдёт использование мьютексов / семафоров (нужное подчеркнуть) 

Оказывается, несмотря на кросс-процессную область видимости Mutex'а (Monitor может использоваться только в пределах одного AppDomain), на него, как и на Monitor, распространяется ограничение "в этом потоке заблокировал, в этом же будь добр и разблокировать". К счастью, Semaphore лишен этого ограничения. Так что единственный выход в моей ситуации - использовать одноместный Semaphore. Что я, в общем-то, и сделал smile
Вот отличная статья по multythreading'у: http://www.albahari.com/threading/part2.html Мне она понравилась даже больше, чем мануал Рихтера.
Вот выдержки из этой статьи, подтвержающие мои слова:
1. Про Mutex:
Цитата

Just like with C#'s lock statement, a Mutex can only be released from the same thread that obtained it.

2. Про Semaphore:
Цитата

A Semaphore with a capacity of one is similar to a Mutex or lock, except that the Semaphore has no "owner" – it's thread-agnostic. Any thread can call Release on a Semaphore, while with Mutex and lock, only the thread that obtained the resource can release it.


Добавлено через 2 минуты и 47 секунд
Цитата(Partizan @  8.8.2008,  14:55 Найти цитируемый пост)
Idsa, эээ...а можете привести конкретную ситуацию, когда такое поведение является желаемым?... 

Нашел красивую формулировку ответа на этот вопрос: для упорядочивания обращений к совместно используемым ресурсами smile


Это сообщение отредактировал(а) Idsa - 9.8.2008, 10:57


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0511 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.