這篇文章給大家分享的是有關C# WiteOne有什么用的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
C#提供了Mutex與Interlocked這兩個與線程相關的類,都在Threading命名空間下! Mutex中提供了WiteOne,ReleaseMutex 兩個實例方法:C# WiteOne的作用是"阻塞當前線程,提供對該線程的原子操作"也就是說當一個線程遇到C# WiteOne的時候,如果在WiteOne里面沒有線程在操作,則此線程進去操作而里面有線程的時候,所有到此的線程均需要排隊等候里面的線程執行完畢而控制這樣操作的結束標記就是使用ReleaseMutex 方法!
就好比C# 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} 正在運行...... ", Thread.CurrentThread.Name ) ; Thread.Sleep( 5000 ); //模擬執行 Console.WriteLine( "{0} 已經中止...... ", Thread.CurrentThread.Name ) ; //標記-1 Interlocked.Decrement(ref poolFlag) ; } }感謝各位的閱讀!關于“C# WiteOne有什么用”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。