Блокировка в одном потоке, освобождение в другом - PullRequest
8 голосов
/ 08 февраля 2012

У меня есть игровой сервер, который может принимать запросы от пользователя.Пользователь может запросить размещение фигур.Затем метод place порождает некоторые асинхронные httpwebrequests (с таймаутами), чтобы определить правильность размещения.Я хочу блокировку, которая будет заблокирована, когда сервер получит запрос на размещение, и будет разблокирована обратным вызовом через Интернет.Я бы использовал ReaderWriterLock, но это работает, только если я остаюсь в том же потоке, и обратные вызовы веб-запроса происходят в разных потоках.Есть еще одна блокировка, которую я должен использовать?

Ответы [ 2 ]

9 голосов
/ 08 февраля 2012

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

4 голосов
/ 08 февраля 2012

Вы можете использовать Семафор .Цитата из руководства;

Класс Semaphore не обеспечивает идентификацию потока при вызовах WaitOne или Release.

Другими словами, у вас не должно возникнуть проблем с получением / освобождением из двух разных потоков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...