Mutex中提供了WiteOne,Releasemutex 兩個實例方法~
WiteOne的作用是”阻塞當前線程,提供對該線程的原子操作”
也就是說當一個線程遇到WiteOne的時候,如果在WiteOne里面沒有線程在操作,則此線程進去操作
而里面有線程的時候,所有到此的線程均需要排隊等候里面的線程執行完畢~
而控制這樣操作的結束標記就是使用ReleaseMutex 方法!
就好比WiteOne是一把鎖一樣~而ReleaseMutex 就是一把鑰匙
當10個人都看到這個門的時候,第一個到達門口的人會看到屋子里沒有人,則他進去,同時會把門鎖上~
后面的人自然要在門口等候,當此人在屋子里執行完任務后他會用鑰匙把門打開!
出去后把鎖交給門口排隊的第二位同志,第二位同志再做同樣的操作
如果第一位同志執行完任務以后不把使用權交給第二個人的話,而直接退出
那么屋子自然就空了下來,而門還是鎖的~不必擔心~門會自動打開,只要是前一個人已經不在屋子里即可~
然后再來說說這個Interlocked,官方說明是”對一個變量進行原子操作進行遞增或者遞減然后保存”
原子操作的概念就是,有且只有一個線程在對此變量進行操作~不準其他線程干預的操作
當對一個變量進行原子操作的時候,此變量就會加鎖,而其他線程是無法訪問的,只能掛起等候此變量解鎖
我感覺實際上使用的也就是Mutex來實現的
好了開始說說具體的實現吧
public class MutexTest
{
private static int poolFlag = 0 ;//標記
private const int amountThread = 10 ;//線程總量
private const int maxThread = 3 ;//可執行線程最大數量
private static Mutex muxConsole = new Mutex() ;
public static void Main()
{
for ( int i = 0 ; i < amountThread ; i ++ )
{
// 創建指定數量的線程
// 是線程調用Run方法
// 啟動線程
Thread trd = new Thread( new ThreadStart( Run ) ) ;
trd.Name = “線程” + i ;
trd.Start() ;
}
}
public static void Run()
{
muxConsole.WaitOne(); //阻塞隊列
Interlocked.Increment(ref poolFlag) ; //標記+1
if (poolFlag != maxThread) //判斷是否等于上限
muxConsole.ReleaseMutex(); //如果此線程達不到可執行線程上限,則繼續開通,讓后面的線程進來
console.writeline( “{0} 正在運行……\n”, Thread.CurrentThread.Name ) ;
Thread.Sleep( 5000 ); //模擬執行
Console.WriteLine( “{0} 已經中止……\n”, Thread.CurrentThread.Name ) ;
//標記-1
Interlocked.Decrement(ref poolFlag) ;
}
}
另外一種,放在 WaitForSingleObject后面 直到不再需要保護參數為止 如 要保護全局 int a; 線程1 { WaitforsingleObject....... //等待獲得對a的寫的權利 a++ //保護部分 ReleaseMutex...... //不需要保護了 允許其它線程寫a } 線程2 { WaitforsingleObject....... //等待獲得對a的寫的權利 a++ //保護部分 ReleaseMutex...... //不需要保護了 允許其它線程寫a }
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...
在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...
在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...
玩游戲用windows哪個版本好?1、旗艦版最好,Windows 7旗艦版不屬于微軟公司變更土地性質的Windows 7系統系列中的終結版本,是為了變成Windows XP系統的新系統,Windows7的版本還有簡易版、家庭普通版、家庭低級版、專業版。并且旗艦版是所有Windows7系統中是最貴的(正版系統)也是功能最完善的系統。xp系統和win7哪個更流暢?xp系統和win7而言xp會更流暢,而...
tendystar308藍牙耳機的密碼多少?tendystar308藍牙耳機的密碼默認為0000,無需修改。具體使用方法如下:1。新耳機開機后,會有語音提示自動搜索配對設備。此時,為手機和其他支持藍牙的設備打開藍牙。 2. 打開手機和其他設備上的可檢測性,即可以檢測附近的藍牙信號。然后搜索附近的藍牙信號,搜索藍牙耳機(一般會顯示藍牙耳機的型號),然后點擊連接。如果系統提示您輸入密碼,則默認值為00...
12promax建議更新ios15還是14.8?蘋果吧12promax個人建議使用蘋果ios14.8。在日常運用測試出來場景中,這個可以發現自己,蘋果ios14.8在然后打開一些日常洗護應用方法時,響應速度稍微地比蘋果ios15慢了一些。同樣的,在打開一些好玩的小游戲時,ios1114.8要比ios815更快那些,只不過只是因為幾毫秒的巨大的差距,但是也能猜出,ios815肯定不能能提高那個手機流...