是否有允许多个线程访问的锁,直到线程请求独占访问

本文关键字:线程 访问 请求 许多个 是否 | 更新日期: 2023-09-27 17:57:20

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

我想要一个允许无限数量的SendMessage操作来取锁的锁,但只允许 Connect/Disconnect 操作在它们具有独占锁并且所有其他 SendMessage/Connect/Disconnect 操作退出并释放锁后开始。

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

它还具有排队所有Connect/Disconnect ,显然不能同时运行。

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

是否有允许多个线程访问的锁,直到线程请求独占访问

听起来你想要在.Net 4中使用ReaderWriterLock或更好的ReaderWriterLockSlim。要使用 SendMessage,您将获得读取器锁,但调用ConnectDisconnect将需要编写器锁。

看来你正在寻找ReaderWriterLockSlim .