執行緒同步技術, windows
原子鎖 api
interlockedincrement(1個引數)
interlockeddecrement(1個引數)
臨界區void 初始化乙個臨界區
void initializecriticalsection(
lpcrittical_section lpcriricalsection // 臨界區變數
)進入臨界區
void entercriticalsection(
lpcritical_section lpcriricalsection // 臨界區
)離開臨界區
void deletecriticalsection(
lpcritical_section lpcriricalsection // 刪除臨界區.
)互斥:
當互斥鎖不被枷鎖時,有訊號,當互斥鎖上時,無訊號.
建立互斥
handle createmutex(
lpsecurity_attributes lpmutexattributes,
// 安全屬性
bool binitalowner, // 初始的擁有者,false建立時沒有執行緒擁有互斥.
lpctstr lpname // 命名
等候互斥
waitfor....
3 釋放互斥
bool releasemutex(
handle hmutex // handle tomutex))
4. 關閉控制代碼.
5. 開啟互斥鎖
openmutex 通過名稱返回互斥控制代碼
事件建立事件
handle createevent(
lpsecurity_attributes lpeventattributes, // sd
bool bmanualreset, // true手動將訊號轉變為無訊號
// false,自動設定復位
bool binitialstate, // false 初始狀態無訊號
lpctstr lpname // object name
);等候時間
將事件設定成有訊號狀態
bool setevent(hevent)
將事件設定成無訊號狀態
bool resetevent(hevent);
關閉事件
closehandle();
訊號量 handle createsemaphore(
lpsecurity_attributes lpsemaphoreattributes,
long linitialcount, // 初始化訊號量數量3
long lmaximumcount, // 訊號量的最大值 ?? 10
lpctstr lpname // 命名
);建立成功返回訊號量控制代碼
等候訊號量
給訊號量指定新值
bool releasesemaphore( handle hsemaphore, // 訊號量
long lreleasecount, // count increment amount // 指定新值.
lplong lppreviouscount // previous count // 可以為null
);可等候定時器
等候函式:
waitformultipleobjects - 等候多個
dword waitformultipleobjects(
dword ncount, // 控制代碼數量
const handle *lphandles, // 控制代碼陣列
bool fwaitall, // true 等待所有控制代碼都有訊號時返回,false 有乙個有訊號就返回
dword dwmilliseconds // 超時時間infinite 代表永遠
);返回值是有訊號耳朵控制代碼在陣列裡的下標.
Windows執行緒同步
以下內容摘抄自 visual c 開發技術大全 為學習筆記。執行緒同步的方法有很多,最常用的有 互斥 cmutex 臨界 criticalsection 訊號量 semaphore 事件 event 等。這4種方式分別在 win32 和 mfc 兩種方式下各有一種實現,mfc 方式是對 win32方...
Windows執行緒同步
多執行緒程式中,多個執行緒在申請唯一份資源時,存在乙個隱患那就是重複使用。舉乙個例子,火車售票系統,一共100張票,用兩個執行緒來模擬售票。dword winapi fun1proc lpvoid lpparameter dword winapi fun1proc lpvoid lpparamete...
執行緒同步的幾種方式
程序中線程同步的四種常用方式 一 臨界區 ccriticalsection 當多個執行緒訪問乙個獨占性共享資源時,可以使用臨界區物件。擁有臨界區的執行緒可以訪問被保護起來的資源或 段,其他執行緒若想訪問,則被掛起,直到擁有臨界區的執行緒放棄臨界區為止。具體應用方式 1 定義臨界區物件ccritica...