critical section(臨界區)用來實現「排他性占有」。適用範圍是單一程序 的各執行緒之間。它是:
乙個區域性性物件,不是乙個核心物件。
快速而有效率。
不能夠同時有乙個以上的 critical section 被等待。
無法偵測是否已被某個執行緒放棄。
例子
mutex 是乙個核心物件,可以在不同的執行緒之間實現「排他性占有」,甚 至即使那些執行緒分屬不同程序。它是:#include #include #include using namespace std;
critical_section cs;//定義臨界區物件
int g_count = 30;
dword _stdcall proc1(lpvoid param)
return 0;
}dword _stdcall proc2(lpvoid param)
return 0;
}int main()
乙個核心物件。
如果擁有 mu tex 的那個執行緒結束,則會產生乙個 「abandoned」 錯 誤資訊。
可以使用 wait...() 等待乙個 mu tex。
可以具名,因此可以被其他程序開啟。
只能被擁有它的那個執行緒釋放(released)。
例子
semaphore 被用來追蹤有限的資源。它是:#include #include #include using namespace std;
handle g_mutex;//定義鎖物件
int g_count = 30;
dword _stdcall proc1(lpvoid param)
return 0;
}dword _stdcall proc2(lpvoid param)
return 0;
}int main()
乙個核心物件。
沒有擁有者。
可以具名,因此可以被其他程序開啟。
可以被任何乙個執行緒釋放(released)。
例子
#include #include #include using namespace std;
handle g_semaphore;//訊號量
int g_count = 30;
dword _stdcall proc1(lpvoid param)
return 0;
}dword _stdcall proc2(lpvoid param)
return 0;
}int main()
乙個核心物件。
完全在程式掌控之下。
適用於設計新的同步物件。
「要求甦醒」的請求並不會被儲存起來,可能會遺失掉。
可以具名,因此可以被其他程序開啟。
例子
#include #include #include using namespace std;
handle g_event;//事件
int g_count = 30;
dword _stdcall proc1(lpvoid param)
return 0;
}dword _stdcall proc2(lpvoid param)
return 0;
}int main()
執行緒同步的四種方式
1 臨界區 critical section 通過對多執行緒的序列化來訪問公共資源或一段 速度快,適合控制資料訪問。優點 保證在某一時刻只有乙個執行緒能訪問資料的簡便辦法 缺點 雖然臨界區同步速度很快,但卻只能用來同步本程序內的執行緒,而不可用來同步多個程序中的執行緒。2 互斥量 mutex 為協調...
執行緒同步四種方法
執行緒同步的方法 1 wait 使乙個執行緒處於等待狀態,並且釋放所持有的物件的lock。2 sleep 使乙個正在執行的執行緒處於睡眠狀態,是乙個靜態方法,呼叫此方法要捕捉 interruptedexception異常。3 notify 喚醒乙個處於等待狀態的執行緒,注意的是在呼叫此方法的時候,並...
筆記 執行緒同步 基礎 四種同步方式
執行緒同步的概念 多個執行緒操作同一共享資源 在linux裡面建議鎖 執行緒同步的條件 1 共享資源 2 競爭關係 3 多個物件沒有同步的機制 3互斥量 mutext 1 初始化 2 lock枷鎖 3 unlock解鎖 4死鎖 第一種 對同乙個互斥量枷鎖兩次 第二種 兩個資源,乙個執行緒需要同時拿到...