Skip to main content
 首页 » 编程设计

c#之是否有一个锁允许多个线程访问,直到一个线程请求独占访问

2024年02月20日34飞鱼

我有一个聊天连接类,一旦与 Connect 方法连接,它就能够使用 SendMessage 方法发送消息。用户完成后,他们将调用 Disconnect。

我想要一个允许无限数量的 SendMessage 操作获取锁的锁,但只允许 Connect/Disconnect 操作一旦他们拥有独占锁并且所有其他 SendMessage/Connect/Disconnect 操作都已退出并释放了锁,便开始。

使用这种类型的锁,我可以确保 SendMessage 可以安全访问内部 Socket、SocketReader 和 SocketWriter 类,并且可以确保它们都不会被并行 Disconnect 调用处理掉。

它还有一个好处就是排队所有的Connect/Disconnect,显然不能同时运行。

.NET 框架中是否存在这样的锁?

请您参考如下方法:

听起来你想要一个 ReaderWriterLock 或更好的 ReaderWriterLockSlim 在 .Net 4 中。要使用 SendMessage 你会获得一个阅读器锁但是调用 Connect 或 Disconnect 将需要作者锁。