C#多线程(三)
一、线程同步概述
在多线程程序中,当存在共享变量和抢占资源的情况时,需要使用线程同步机制来防止发生这些冲突,这样才能保证得到可预见的结果,也就是线程安全的。否则就会出现不可预知的结果产生线程不安全问题。特别是在访问同一个数据的时候最为明显。主要通过以下四个方式进行:
- 简单阻塞:让一个线程等待另一个线程执行结束或者等待一段时间而阻塞执行,使用Sleep、Join、Task.Wait这几个方式
构成
|
目的
|
Sleep
|
阻止给定的时间周期
|
Join
|
等待另一个线程完成
|
- 锁:排他锁是最常见的锁机制,对于共享数据在每个线程内访问前判断锁的情况,保证每次只能有一个线程访问,使得相互不会干扰结果。排他锁使用lock关键字、Mutex类和SpinLock,对于共享锁使用Semaphore、SemaphoreSlim和读写锁。
构成
|
目的
|
是否跨进程
|
速度
|
lock
|
确保只有一个线程访问某个资源或某段代码。
|
否
|
免责声明: 本文仅代表作者个人观点,与爱易网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
-
C#统制扫描仪
-
最近要在上海租房的看过来,顶者有分,该如何处理
-
c#用面向对象思想写一个计算器
-
C#怎么让word表格居中显示
-
vc#2010 操作的Access数据库,该如何处理
-
求教wpf中Effect用法解决办法
-
大神帮忙,刚刚学C
-
WPF ScrollViewer 的BUG,该怎么解决
-
怎么解决linq的效率有关问题
-
请教,VS2012中,工具栏上的“启动调试”按钮旁的下拉列表中选择“模拟器"如何才能出现
-
C#统计Ayyaylist中相同元素出现的次数并排序,该如何处理
-
有一个网站访问时要先验证一下IP,既在浏览器打入地址 http://dbshare.cintcm.com/webdkrh1/VerifyIp.asp,如果IP正确,就可以访问其中内容,该如何解决
-
《C#》 求起步教程 书籍之类的 多谢
-
邮件系统无法发email到hotmail[求救]解决方法
-
如何把select [field1] from tab where [field1] like '%string1%'转换成linq
-
C# 有关问题
-
这SQL语句要怎么转换成LINQ语句呢
-
结构体怎么循环赋值
-
怎么用C#或者别的语言来检测硬件的型号
-
C#WinForm捕获未处理的错误
|