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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#中Lock关键字的使用

發(fā)布時間:2025/3/21 C# 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#中Lock关键字的使用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

C# 中的 Lock 語句通過隱式使用 Monitor 來提供同步功能。lock 關(guān)鍵字在塊的開始處調(diào)用 Enter,而在塊的結(jié)尾處調(diào)用 Exit。?

通常,應(yīng)避免鎖定 public 類型,否則實(shí)例將超出代碼的控制范圍。 常見的結(jié)構(gòu) lock (this)、lock (typeof (MyType)) 和 lock ("myLock") 違反此準(zhǔn)則:

  • 如果實(shí)例可以被公共訪問,將出現(xiàn) lock (this) 問題。
  • 如果 MyType 可以被公共訪問,將出現(xiàn) lock (typeof (MyType)) 問題。
  • 由于進(jìn)程中使用同一字符串的任何其他代碼都將共享同一個鎖,所以出現(xiàn) lock(“myLock”) 問題。

???? 最佳做法是定義 private 對象來鎖定, 或 private static 對象變量來保護(hù)所有實(shí)例所共有的數(shù)據(jù)。

總結(jié):

1、如果兩個操作是相互影響的,比如讀寫一個文件,只能允許一個執(zhí)行,則鎖對象應(yīng)該相同。

????? 因?yàn)閘ock隱含是Monitor, Monitor類通過向單個線程授予對象鎖來控制對對象的訪問。對象鎖提供限制訪問代碼塊(通常稱為臨界區(qū))的能力。當(dāng)一個線程擁有對象的鎖時,其他任何線程都不能獲取該鎖。還可以使用 Monitor 來確保不會允許其他任何線程訪問正在由鎖的所有者執(zhí)行的應(yīng)用程序代碼節(jié),除非另一個線程正在使用其他的鎖定對象執(zhí)行該代碼。

2、如果兩個操作是互不相干的,則其鎖對象應(yīng)該不同,如若采用同一個鎖,將直接影響其它操作的執(zhí)行。

????? 在我們開發(fā)過程中,經(jīng)常為了省事,而只創(chuàng)建一個鎖對象,還有的在基類創(chuàng)建一個鎖,由子類共用,這是在系統(tǒng)架構(gòu)中采用工廠模式,經(jīng)常出現(xiàn)的誤區(qū)。如果是互不相干的操作,一個操作的執(zhí)行必須等待另一個操作結(jié)束之后才能執(zhí)行,必然受到了該鎖的影響,大大降低了系統(tǒng)的性能,有時候會造成死鎖。

3、lock本身也有系統(tǒng)損耗。

????? lock本身也需要利用資源,所以不必要的鎖會降低系統(tǒng)的性能。在這個試驗(yàn)里,加了鎖和不加鎖,執(zhí)行的結(jié)果不一樣,加了鎖輸出的結(jié)果會縮短。這個你自己也可以寫一個小例子進(jìn)行測試。所以使用鎖一定要慎重,不能濫用。

轉(zhuǎn)載于:https://www.cnblogs.com/jimmymi/p/4553905.html

總結(jié)

以上是生活随笔為你收集整理的C#中Lock关键字的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。