/*
*/訊號量說簡單點就是為了執行緒同步,或者說是為了限制執行緒能執行的數量。
那它又是怎麼限制執行緒的數量的哩?是因為它內部有個計數器,比如你想限制最多5個執行緒執行,那麼這個計數器的值就會被設定成5,如果乙個執行緒呼叫了這個semaphore,那麼它的計數器就會相應的減1,直到這個計數器變為0。這時,如果有另乙個執行緒繼續呼叫這個semaphore,那麼這個執行緒就會被阻塞。
獲得semaphore的執行緒處理完它的邏輯之後,你就可以呼叫它的release()函式將它的計數器重新加1,這樣其它被阻塞的執行緒就可以得到呼叫了。
using system;結果如下圖所示,其它的執行緒只有等到主線程釋放才會執行,因為我給訊號量計數器的初始值是0,所以其它執行緒在主線程釋放前都會被阻塞。而後,我在主線程直接用release()函式將計數器置為5,所以5個執行緒可以同時得到執行。using system.collections.generic;
using system.linq;
using system.text;
using system.threading;
namespace semaphore1
thread.sleep(1000);
console.writeline("
main thread over!
");//
釋放訊號量,將初始值設回5,你可以將
//將這個函式看成你給它傳的是多少值,計數器
//就會加多少回去,release()相當於是release(1)
semaphore.release(5);
}static
void work(object obj)
start!
",obj);
semaphore.release();}}
}
另外,可以給訊號量設定乙個名稱,這個名稱是作業系統可見的,因此,可以使用這些訊號量來協調跨程序邊界的資源使用。
using system;執行兩個這樣的程式,你講看到這樣的結果,在第二個執行的示例中,會將執行緒阻塞在第三個訊號量上。using system.collections.generic;
using system.linq;
using system.text;
using system.threading;
namespace semaphore2
}}
C 多執行緒 訊號量 Semaphore
semaphore,是負責協調各個執行緒,以保證它們能夠正確 合理的使用公共資源。也是作業系統中用於控制程序同步互斥的量。semaphore常用的方法有兩個waitone 和release release 的作用是退出訊號量並返回前乙個計數,而waitone 則是阻止當前執行緒,直到當前執行緒的wa...
多執行緒分析之Semaphore
網上看了許多講解semaphore的,用semaphore來實現順序列印字母,但是可能大家都沒有清楚具體的原因,所以來給大家分析下為什麼可以使用semaphore來實現順序列印字母順序。先開啟jdk8原始碼中的semaphore,可以看到semaphore是通過繼承aqs來現實功能 aqs,doug...
C 多執行緒的用法9 Semaphore
semaphore 可理解為允許執行緒執行訊號的池子,池子中放入多少個訊號就允許多少執行緒同時執行。1 private static void multithreadsynergicwithsemaphore 2 1819 20 thread thread2 new thread 21 27thre...