![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| Idsa |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 14 Всего: 62 |
Мне необходимо заблокировать синхронизационную переменную в одном потоке, а разблокировать - в другом. Насколько я понял, класс Monitor не предназначен для этого (ругается SynchronizationLockException'ом). Как тогда быть? Использовать тяжеловесные объекты ядра?
|
|||
|
||||
| Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 18 Всего: 67 |
Idsa, эээ...а можете привести конкретную ситуацию, когда такое поведение является желаемым?...
-------------------- СУВ, Partizan. |
|||
|
||||
| Idsa |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 14 Всего: 62 |
Это секрет государственной важности :-P А вообще, что такого дикого в таком поведении? Общий случай: 1. есть много ресурсов, доступ к которым необходимо разрешать/запрещать по определенной логике 2. один из потоков, дойдя до определенной стадии, разрешает доступ к какому-либо ресурсу. |
|||
|
||||
| Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 18 Всего: 67 |
Idsa, похоже здесь больше подойдёт использование мьютексов / семафоров (нужное подчеркнуть)
-------------------- СУВ, Partizan. |
|||
|
||||
| Idsa |
|
||||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 14 Всего: 62 |
Оказывается, несмотря на кросс-процессную область видимости Mutex'а (Monitor может использоваться только в пределах одного AppDomain), на него, как и на Monitor, распространяется ограничение "в этом потоке заблокировал, в этом же будь добр и разблокировать". К счастью, Semaphore лишен этого ограничения. Так что единственный выход в моей ситуации - использовать одноместный Semaphore. Что я, в общем-то, и сделал Вот отличная статья по multythreading'у: http://www.albahari.com/threading/part2.html Мне она понравилась даже больше, чем мануал Рихтера. Вот выдержки из этой статьи, подтвержающие мои слова: 1. Про Mutex:
2. Про Semaphore:
Добавлено через 2 минуты и 47 секунд
Нашел красивую формулировку ответа на этот вопрос: для упорядочивания обращений к совместно используемым ресурсами Это сообщение отредактировал(а) Idsa - 9.8.2008, 10:57 |
||||||||
|
|||||||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |