原文地址:http://www.cnblogs.com/apsnet/archive/2012/07/08/2581475.html

这一篇文章并不是全部正确的,lock(objectA){codeB} 为lock的格式。文章提出objectA与codeB将同时被锁定无法访问。然而事实上objectA更像是作为一个标志位,也可以成为互斥锁。当objectA第一次被锁定的时候,只有codeB执行结束才会解开锁。这时候,如果有其他想要使用codeB内容的线程才能再次锁上objectA,继续执行codeB.。可以参考原文的评论区!参考原文的评论区!参考原文的评论区!

自己举个例子,之前看到的网络编程的例子,网络编程文章地址:http://www.tracefact.net/CSharp-Programming/Network-Programming-Part4.aspx

C#中线程锁的一点理解

在这个例子里,首先明确网络流streamToClient目前只有一个,也就是网络端当前只有连接到一个客户端。异步读取网络流的内容,lock把streamToClient这个networkstream锁住,streamToClient这个阶段就只能被当前分线程调用,这个时候如果其他线程要读取网络流内容,就会调用方法BeginRead() 接着继续异步读取,档执行到lock时,判断,当前网络流正在被使用,被锁住了。就会等待正在使用的线程执行完毕解开锁,然后其他线程才锁住网络流继续读取。

(一个服务器端和一个客户端只有一个networkstream,但是可能有不同的线程同时异步传递数据,此举保证某个线程能稳定的接收数据)


参考官方文档:https://msdn.microsoft.com/zh-cn/library/c5kehkcz(VS.80).aspx


相关文章:

  • 2022-12-23
  • 2021-05-27
  • 2021-11-20
  • 2022-12-23
  • 2021-12-19
  • 2021-11-22
  • 2021-06-01
  • 2021-05-20
猜你喜欢
  • 2021-06-21
  • 2021-08-16
  • 2021-06-29
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案