C#中线程锁的一点理解
2017-08-22 16:12
309 查看
原文地址: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
在这个例子里,首先明确网络流streamToClient目前只有一个,也就是网络端当前只有连接到一个客户端。异步读取网络流的内容,lock把streamToClient这个networkstream锁住,streamToClient这个阶段就只能被当前分线程调用,这个时候如果其他线程要读取网络流内容,就会调用方法BeginRead() 接着继续异步读取,档执行到lock时,判断,当前网络流正在被使用,被锁住了。就会等待正在使用的线程执行完毕解开锁,然后其他线程才锁住网络流继续读取。
(一个服务器端和一个客户端只有一个networkstream,但是可能有不同的线程同时异步传递数据,此举保证某个线程能稳定的接收数据)
参考官方文档:https://msdn.microsoft.com/zh-cn/library/c5kehkcz(VS.80).aspx
这一篇文章并不是全部正确的,lock(objectA){codeB} 为lock的格式。文章提出objectA与codeB将同时被锁定无法访问。然而事实上objectA更像是作为一个标志位,也可以成为互斥锁。当objectA第一次被锁定的时候,只有codeB执行结束才会解开锁。这时候,如果有其他想要使用codeB内容的线程才能再次锁上objectA,继续执行codeB.。可以参考原文的评论区!参考原文的评论区!参考原文的评论区!
自己举个例子,之前看到的网络编程的例子,网络编程文章地址:http://www.tracefact.net/CSharp-Programming/Network-Programming-Part4.aspx
在这个例子里,首先明确网络流streamToClient目前只有一个,也就是网络端当前只有连接到一个客户端。异步读取网络流的内容,lock把streamToClient这个networkstream锁住,streamToClient这个阶段就只能被当前分线程调用,这个时候如果其他线程要读取网络流内容,就会调用方法BeginRead() 接着继续异步读取,档执行到lock时,判断,当前网络流正在被使用,被锁住了。就会等待正在使用的线程执行完毕解开锁,然后其他线程才锁住网络流继续读取。
(一个服务器端和一个客户端只有一个networkstream,但是可能有不同的线程同时异步传递数据,此举保证某个线程能稳定的接收数据)
参考官方文档:https://msdn.microsoft.com/zh-cn/library/c5kehkcz(VS.80).aspx
相关文章推荐
- 关于C#中Thread.Join()的一点理解
- 关于C#中Thread.Join()的一点理解
- 关于C#线程的理解(资料收集)
- 关于C#中Thread.Join()的一点理解
- 关于C#中Thread.Join()的一点理解
- 关于C#里面socket编程的一点理解
- 关于C#中Thread.Join()的一点理解
- Qt4.7中,线程,信号,事件的一点理解
- 关于C#中Thread.Join()的一点理解
- 对【线程】,【协程】 的一点理解, luikimfai(lkf) blog
- C#线程学习的一点体会和总结
- 对C#下函数,委托,事件的一点理解!
- c#Winform程序调用app.config文件配置数据库连接字符串 SQL Server文章目录 浅谈SQL Server中统计对于查询的影响 有关索引的DMV SQL Server中的执行引擎入门 【译】表变量和临时表的比较 对于表列数据类型选择的一点思考 SQL Server复制入门(一)----复制简介 操作系统中的进程与线程
- C# 委托与事件的一点理解(2)
- C#学习第八弹之线程基础理解
- c#还有一点不太明白,既然开启了线程为何还要委托呢?
- C#中List或其它集合对象排序方法的一点理解
- 用c#小程序理解线程
- 对C#下函数,委托,事件的一点理解!
- 今天你事件了吗——对基于C#的事件编程的一点理解