C 使用AutoResetEvent實現同步

2022-10-06 06:45:10 字數 1249 閱讀 5118

前幾天碰到乙個執行緒的順序執行的問題,就是乙個非同步執行緒往adgailv介面傳送乙個資料請求。另外乙個非同步執行緒往b介面傳送乙個資料請求,當a和b都執行成功了,再往c介面傳送乙個請求。說真的,一直做bs專案,對執行緒了解,還真不多。就知道autoresetevent這個東西和執行緒有關,用於處理執行緒切換之類,於是決定用autoresetevent來處理上面的問題。程式設計客棧

原來,autoresetevent在.net多執行緒程式設計中經常用到。當某個執行緒呼叫waitone方法後,訊號處於傳送狀態,該執行緒會得到訊號, 程式就會繼續向下執行,否則就等待。而且 autoresetevent.waitone()每次只允許乙個執行緒進入,當某個執行緒得到訊號後,autoresetevent會自動又將訊號置為不傳送狀態,其他呼叫waitone的執行緒只有繼續等待.也就是說,autoresetevent一次只喚醒乙個執行緒,其他執行緒還是堵塞。

簡介autoresetevent(bool initialstate):建構函式,用乙個指示是否將初始狀態設定為終止的布林值初始化該類的新例項。

false:無訊號,子執行緒的waitone方法不會被自動呼叫

true:有訊號,子執行緒的waitone方法會被自動呼叫

reset ():將事件狀態設定為非終止狀態,導致執行緒阻止;如果該操作成功,則返回true;否則,返回false。

set ():將事件狀態設定為終止狀態,允許乙個或多個等待執行緒繼續;如果該操作成功,則返回true;否則,返回false。

waitone(): 阻止當前執行緒,直到收到訊號。

waitone(timespan, boolean) :阻止當前執行緒,直到當前例項收到訊號,使用 timespan 度量時間間隔並指定是否在等待之前退出同步域。   

waitall():等待全部訊號。 

實現class program }

public class request

; }

public void inte***cea()

public void inte***ceb()

public void inte***cec()

}注意,waitone 或是waitall 最好都加上超時時間。否則沒有收到訊號,執行緒一直會阻塞。 

後話這個只是上面的場景的乙個簡化,主要是用來解決剛剛我說的那個場景的問題。

以上是自己對autoresetevent的使用總結。不足之處請各位指點一二。

本文標題: c#使用autoresetevent實現同步

本文位址: /ruanjian/csharp/183351.html

使用c 包裝c

今天公司讓使用c 包裝c 提供c 的介面給客戶使用,現在記錄一下實現過程。對你的vs進行如上改動便可。3 註冊。關於註冊我上面說的那個部落格已經非常清楚了,這裡不再贅述。上面說的是一些硬性的條件。除了這些之外還有一些值得注意的是 dll檔案的存放位置以及需要的檔案。c 生成的dll檔案包括 dll和...

C 使用extern C 簡單使用

先說一下函式過載,c 之所以會進行函式過載,是因為對函式名進行二次修飾 重新命名 在c檔案中寫好的程式,c 引入過來,卻沒法使用提示 無法連線的外部符號,那是因為c 按照c 的函式命名機制來尋找函式的實現.第一種情況 檔案為 test.h void show 進行了函式宣告檔案 test.c inc...

c和c 混合使用

我們編寫 經常需要c和c 混合使用,為了使 c 和 c 保持互相相容的過程呼叫介面,需要,為了簡化,從而定義了兩個巨集方面我們使用 1.在 c 裡加上 extern c 作為符號宣告的一部分。2.begin decls 和 end decls 在c語言 中標頭檔案中,充斥著下面的 片段 begin ...