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

时间:2013-02-02 22:50:54

标签: c# synchronization

我有一个聊天连接类,一旦与Connect方法连接,就可以使用SendMessage方法发送消息。用户完成后,他们会拨打Disconnect

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

通过这种类型的锁定,我可以确保SendMessage可以安全访问内部SocketSocketReaderSocketWriter类,并且可以肯定它们都不会是通过并行Disconnect电话处理。

它还有排队所有Connect / Disconnect的好处,显然无法同时运行。

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

2 个答案:

答案 0 :(得分:3)

听起来你想在.Net 4中使用ReaderWriterLock或更好ReaderWriterLockSlim。要使用SendMessage,您将获得一个读卡器锁,但需要调用ConnectDisconnect作家锁。

答案 1 :(得分:1)

看来你正在寻找ReaderWriterLockSlim