c 多執行緒 Semaphore

2021-07-07 09:50:43 字數 1356 閱讀 6175

/*

*/訊號量說簡單點就是為了執行緒同步,或者說是為了限制執行緒能執行的數量。

那它又是怎麼限制執行緒的數量的哩?是因為它內部有個計數器,比如你想限制最多5個執行緒執行,那麼這個計數器的值就會被設定成5,如果乙個執行緒呼叫了這個semaphore,那麼它的計數器就會相應的減1,直到這個計數器變為0。這時,如果有另乙個執行緒繼續呼叫這個semaphore,那麼這個執行緒就會被阻塞。

獲得semaphore的執行緒處理完它的邏輯之後,你就可以呼叫它的release()函式將它的計數器重新加1,這樣其它被阻塞的執行緒就可以得到呼叫了。

using system;

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();}}

}

結果如下圖所示,其它的執行緒只有等到主線程釋放才會執行,因為我給訊號量計數器的初始值是0,所以其它執行緒在主線程釋放前都會被阻塞。而後,我在主線程直接用release()函式將計數器置為5,所以5個執行緒可以同時得到執行。

另外,可以給訊號量設定乙個名稱,這個名稱是作業系統可見的,因此,可以使用這些訊號量來協調跨程序邊界的資源使用。

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...