日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

异步与并行~ReaderWriterLockSlim实现的共享锁和互斥锁

發布時間:2023/12/19 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 异步与并行~ReaderWriterLockSlim实现的共享锁和互斥锁 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

返回目錄

在System.Threading.Tasks命名空間下,使用ReaderWriterLockSlim對象來實現多線程并發時的鎖管理,它比lock來說,性能更好,也并合理,我們都知道lock可以對代碼塊進行鎖定,當多線程共同訪問代碼時,只能有一個線程去訪問它,其它線程被阻塞,這對于寫操作是必須的,但對于讀操作來說,就有些浪費資源了,因為我們的讀操作應該是共享的,多個線程可以現時去讀它,這就引出了ReaderWriterLockSlim對象,用它來實現共享鎖和互斥鎖!

聲明一個讀寫鎖

private static ReaderWriterLockSlim rwLock = new ReaderWriterLockSlim();

EnterReadLock和ExitReadLock-共享鎖

當一個線程使用共享鎖時,其它線程同樣了可以訪問這個資源,共用這個鎖對象

rwLock.EnterReadLock();Console.WriteLine(DateTime.Now.ToLongTimeString() + "線程{0}讀到了數據", Thread.CurrentThread.ManagedThreadId);Thread.Sleep(10000);rwLock.ExitReadLock();

EnterWriteLock和ExitWriteLock-互斥鎖

當一個線程使用互斥鎖時,其它線程將被阻塞,直到這個線程釋放鎖(ExitWriteLock)為止

rwLock.EnterWriteLock();Console.WriteLine(DateTime.Now.ToLongTimeString() + "線程{0}寫了數據{1}", Thread.CurrentThread.ManagedThreadId, res);Thread.Sleep(10000);rwLock.ExitWriteLock();

我們在測試時,可以模式多個并發的線程,去調用同一個加鎖的代碼,然后看一個它們執行的時間即可

      //多線程的并行Parallel.Invoke(() =>{TestReadWrite("1");}, () =>{TestReadWrite("2");}, () =>{TestReadWrite("3");});

執行的結果

我們可以看到,共享鎖在被訪問時,幾個線程是同時的;而互斥鎖在使用時,則出現了線程之間的等待(阻塞)!

感謝各位的閱讀!

返回目錄

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的异步与并行~ReaderWriterLockSlim实现的共享锁和互斥锁的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。