我有一个聊天连接类,一旦与 Connect 方法连接,它就能够使用 SendMessage 方法发送消息。用户完成后,他们将调用 Disconnect。
我想要一个允许无限数量的 SendMessage 操作获取锁的锁,但只允许 Connect/Disconnect 操作一旦他们拥有独占锁并且所有其他 SendMessage/Connect/Disconnect 操作都已退出并释放了锁,便开始。
使用这种类型的锁,我可以确保 SendMessage 可以安全访问内部 Socket、SocketReader 和 SocketWriter 类,并且可以确保它们都不会被并行 Disconnect 调用处理掉。
它还有一个好处就是排队所有的Connect/Disconnect,显然不能同时运行。
.NET 框架中是否存在这样的锁?
请您参考如下方法:
听起来你想要一个 ReaderWriterLock 或更好的 ReaderWriterLockSlim 在 .Net 4 中。要使用 SendMessage 你会获得一个阅读器锁但是调用 Connect 或 Disconnect 将需要作者锁。
