新聞中心
目錄:
一、線程同步概述
二、線程同步的使用
三 、總結(jié)
一、線程同步概述
前面的文章都是講創(chuàng)建多線程來實(shí)現(xiàn)讓我們能夠更好的響應(yīng)應(yīng)用程序,然而當(dāng)我們創(chuàng)建了多個線程時,就存在多個線程同時訪問一個共享的資源的情況,在這種情況下,就需要我們用到線程同步,線程同步可以防止數(shù)據(jù)(共享資源)的損壞。
然而我們在設(shè)計(jì)應(yīng)用程序還是要盡量避免使用線程同步, 因?yàn)榫€程同步會產(chǎn)生一些問題:
- 它的使用比較繁瑣。因?yàn)槲覀円妙~外的代碼把多個線程同時訪問的數(shù)據(jù)包圍起來,并獲取和釋放一個線程同步鎖,如果我們在一個代碼塊忘記獲取鎖,就有可能造成數(shù)據(jù)損壞。
- 使用線程同步會影響性能,獲取和釋放一個鎖肯定是需要時間的吧,因?yàn)槲覀冊跊Q定哪個線程先獲取鎖時候, CPU必須進(jìn)行協(xié)調(diào),進(jìn)行這些額外的工作就會對性能造成影響
- 因?yàn)榫€程同步一次只允許一個線程訪問資源,這樣就會阻塞線程,阻塞線程會造成更多的線程被創(chuàng)建,這樣CPU就有可能要調(diào)度更多的線程,同樣也對性能造成了影響。
所以在實(shí)際的設(shè)計(jì)中還是要盡量避免使用線程同步,因此我們要避免使用一些共享數(shù)據(jù),例如靜態(tài)字段。
二、線程同步的使用
2.1 對于使用鎖性能的影響
上面已經(jīng)說過使用鎖將會對性能產(chǎn)生影響, 下面通過比較使用鎖和不使用鎖時消耗的時間來說明這點(diǎn)
- using
- using
- using
- namespace
- // 比較使用鎖和不使用鎖鎖消耗的時間
- // 通過時間來說明使用鎖性能的影響
- class
- staticvoidstring
- int
- // 迭代次數(shù)為500萬
- constint
- // 不采用鎖的情況
- // StartNew方法 對新的 Stopwatch 實(shí)例進(jìn)行初始化,將運(yùn)行時間屬性設(shè)置為零,然后開始測量運(yùn)行時間。
- forint
- "Use the all time is :{0} ms"
- // 使用鎖的情況
- forint
- ref
- "Use the all time is :{0} ms"
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
網(wǎng)站題目:[.Net線程處理系列]專題四:線程同步-創(chuàng)新互聯(lián)
文章來源:http://fisionsoft.com.cn/article/cepgih.html