2012-02-07 25 views
6

Tôi có một máy chủ trò chơi hơn là có thể nhận được yêu cầu từ người dùng. Một người dùng có thể yêu cầu để đặt miếng. Phương pháp địa điểm sau đó sinh ra một số httpwebrequests không đồng bộ (với hết thời gian chờ) để tìm hiểu xem vị trí đó có chính xác hay không. Tôi muốn một khóa sẽ bị khóa khi máy chủ nhận được yêu cầu vị trí và sẽ được mở khóa bằng cuộc gọi lại trên web. Tôi sẽ sử dụng một ReaderWriterLock, nhưng điều đó chỉ hoạt động nếu tôi ở lại trong cùng một chủ đề, và các yêu cầu gọi lại web xảy ra trên các chủ đề khác nhau. Có khóa nào khác tôi nên sử dụng không?Khóa trong một sợi, nhả ra một số khác

Trả lời

9

Bạn có thể sử dụng a semaphore. Các chủ đề khóa mua lại một giấy phép. Chuỗi async phát hành giấy phép. Semaphores là tiện lợi bởi vì chúng không bị ràng buộc với các chủ đề riêng lẻ.

+0

Cảm ơn, điều đó đã hiệu quả. – Nikhil

4

Bạn có thể sử dụng Semaphore. Trích dẫn từ sổ tay;

Lớp Semaphore không thực thi nhận dạng chuỗi trên cuộc gọi đến WaitOne hoặc Release.

Nói cách khác, bạn sẽ không gặp sự cố khi mua/phát hành từ hai chủ đề khác nhau.

Các vấn đề liên quan