大佬教程收集整理的这篇文章主要介绍了内存屏障生成器,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
这是我对这个问题的看法,并试图在一个答案中提供一个准完整清单。如果遇到其他问题,我将不时编辑我的答案。
普遍认为会引起隐性障碍的机制:
lock
Interlocked
类方法。Volatile
类方法(.NET 4.5+)。SpinLock
方法包括Enter
和Exit
。Thread.Join
Thread.VolatileRead
和 Thread.VolatileWrite
Thread.MemorybarrIEr
volatile
关键字。QueueUserWorkItem
,Task.Factory.StartNew
,Thread.Start
,编译器提供的BeginInvoke
方法等autoresetEvent
,Countdownevent
,Semaphore
,barrIEr
,等。Control.Invoke
,dispatcher.Invoke
,SynchronizationContext.Post
,等。推测(但不确定)导致隐式障碍的机制:
Thread.Sleep
(由我本人提出,也可能是其他人提出的,因为使用这种方法可以解决存在内存障碍问题的代码)Thread.YIEld
Thread.SpinWait
Lazy<T>
取决于LazyThreadSafetymode
指定其他值得注意的提及:
lock
或Interlocked.CompareExchange
。1这说明了为什么BACkgrounDWorker
不用属性volatile
的基础字段即可正确工作的原因CancellationPending
。
阅读Joseph
Albahari的线程教程,以下内容是内存障碍的产生者:
lock
声明(@H_913_8@monitor.Enter/ @H_913_8@monitor.Exit)Interlocked
类上的所有方法此外,Hans Passant和Brian Gideon
添加了以下内容(假设其中一个都不属于先前的类别之一):
Thread.Sleep()
我想知道这份清单是否完整(如果可以实际制作出完整的清单)
编辑 建议:
以上是大佬教程为你收集整理的内存屏障生成器全部内容,希望文章能够帮你解决内存屏障生成器所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。