【C#】【Thread】上下文同步域SynchronizationAttribute
上下文同步:使用SynchronizationAttribute為ContextBoundObject對象創建一個簡單的自動的同步。
這種同步方式僅用于實例化的方法和域的同步。所有在同一個上下文域的對象共享同一個鎖。
//如果不加上下文,那么就是以對象為線程鎖定區域,如果加上下文,那么就是以邏輯上下文為鎖定區域 [Synchronization(SynchronizationAttribute.REQUIRED, true)] class synchronizationClass : ContextBoundObject{public void Start(){MessageBox.Show(Thread.CurrentThread.Name);}}因為是使用SynchronizationAttribute來創建鎖的,所以第一句[Synchronization(SynchronizationAttribute.REQUIRED, true)] 是必不可少的。
又因為是為ContextBoundObject對象創建鎖,所以對象必須是ContextBoundObject,故必須繼承ContextBoundObject。
兩者缺一不可。
測試:
synchronizationClass myclass = new synchronizationClass();Thread thread = new Thread(new ThreadStart(myclass.Start));thread.Name = "thread1";Thread thread2 = new Thread(new ThreadStart(myclass.Start));thread2.Name = "thread2";thread.Start();thread2.Start();現象是thread1先彈框,點擊確定后再彈thread2,原因就是整個對象都是一個鎖,就是在thread1沒處理完,thread2是無法進行操作的。
所以呢,上下文同步域會將整一個上下文全部鎖定,就是說整個類都成為了一個鎖,在線程1未走出該類,線程2就無法進入該類。
加入我把[Synchronization(SynchronizationAttribute.REQUIRED, true)]或者不繼承ContextBoundObject發現此時的現象是thread1和thread2都會彈出框。
這就是鎖與不鎖的區別了。
?
轉載于:https://www.cnblogs.com/mqxs/p/4639197.html
總結
以上是生活随笔為你收集整理的【C#】【Thread】上下文同步域SynchronizationAttribute的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jQuery 插件-(初体验一)
- 下一篇: C#sql语句如何使用占位符