У меня есть игровой сервер, который может принимать запросы от пользователя. Пользователь может запросить размещение предметов. Метод места затем порождает некоторые асинхронные httpwebrequests (с таймаутами), чтобы выяснить, правильно ли установлено место размещения. Я хочу блокировку, которая будет заблокирована, когда сервер получит запрос на размещение, и будет разблокирован веб-обратным вызовом. Я бы использовал ReaderWriterLock, но это работает только в том случае, если я остаюсь в одном потоке, а обратные вызовы веб-запросов встречаются в разных потоках. Есть ли еще один замок, который я должен использовать?Блокировка в одном потоке, освобождение в другом
6
A
ответ
9
Вы можете использовать a semaphore. Запирающая нить получает разрешение. Асинхронный поток освобождает разрешение. Семафоры отличные, потому что они не связаны с отдельными потоками.
4
Вы можете использовать Semaphore. Цитата из руководства;
Класс Семафор не обеспечивает идентификацию нитей при вызовах WaitOne или Release.
Другими словами, у вас не должно возникнуть проблемы с получением/выпуском двух разных потоков.
Смежные вопросы
- 1. Java-блокировка в одном потоке, разблокировка в другом
- 2. C# блокировка в одном потоке, вызывая к выпуску в другом потоке
- 3. Освобождение камеры в потоке
- 4. Можно ли использовать jmethodID в одном потоке в другом потоке?
- 5. QMutex блокируется в одном потоке и разблокируется в другом потоке
- 6. Кнопка анимации на одном потоке и работает в другом потоке
- 7. действия в одном потоке
- 8. Массив объектов, обновление в одном потоке и чтение в другом
- 9. HttpContext.Current.Items в другом потоке
- 10. OConcurrentModificationException в одном потоке
- 11. Проблема параллелизма в одном потоке?
- 12. Учитывая событие в одном потоке, каков наилучший подход к выполнению задачи/метода в другом потоке в .Net?
- 13. Как создать сервер и клиентский сокет в одном другом потоке
- 14. Являются ли присваивания неизменяемым переменным элемента в одном потоке, которые гарантированно отображаются в другом потоке?
- 15. Как изменить значение в одном потоке и прочитать значение в другом потоке с использованием общей памяти?
- 16. Redirect stdout в другом потоке
- 17. Выполнение расчетов в другом потоке
- 18. Прочитать переменную в другом потоке
- 19. PyQt - Dialog в другом потоке
- 20. Обработка исключения в другом потоке
- 21. Продолжая код в другом потоке
- 22. Событие повышение в другом потоке
- 23. Почему эти задачи запускаются в одном потоке?
- 24. Закрытие базы данных SQLite на одном потоке разбивает базу данных, открытую в другом потоке
- 25. Элементы управления, созданные на одном потоке, не могут быть отфильтрованы для элемента управления в другом потоке
- 26. Выполнение операций SQLite в другом потоке
- 27. Сериализованные входящие звонки в одном потоке
- 28. Два клиента в одном потоке Java
- 29. Внедрение исключения C++ в другом потоке
- 30. Обновление таблицы в JScrollPane в другом потоке
Спасибо, что сработало. – Nikhil