多執行緒實現執行緒同步有三種方式:互斥物件、事件物件和關鍵**段。
主要函式:
示例**如下:
#include#includedword winapi fun1proc(lpvoid lpparameter); //新執行緒1的入口函式宣告,函式的名稱fun1proc可任意取
dword winapi fun2proc(lpvoid lpparameter); //新執行緒1的入口函式宣告
int tickets = 100;
handle hmutex;
void main()
{handle hthread1;
handle hthread2;
//引數2:true表示建立互斥物件的執行緒獲取物件的所有權;3:互斥物件的名稱,null表示匿名
hmutex = createmutex(null,false,null);
/*引數1:null表示使用預設的安全性;2:執行緒初始棧的大小,0表示預設使用與呼叫該函式的執行緒相同的棧空間大小;
3:新執行緒的入口函式;4:可通過這個引數給新執行緒傳遞引數;5:0表示執行緒建立後立即執行,create_suspended表示執行緒
建立後處於暫停狀態,需要呼叫resumethread執行;6:用來接收執行緒id*/
hthread1 = createthread(null,0,fun1proc,null,0,null);
hthread2 = createthread(null,0,fun2proc,null,0,null);
/*closehandle關閉對新建立的執行緒的引用,並不是終止新執行緒。還會遞減執行緒核心物件的使用計數,當使用計數為0時,系統就會釋放該執行緒核心物件,
如果不關閉執行緒控制代碼,只有等到程序終止時,系統才會清理這些物件*/
closehandle(hthread1);
closehandle(hthread2);
cout<
sleep(1);
cout<
sleep(1);
cout注意點:
主要函式:
示例**如下:
#include#includedword winapi fun1proc(lpvoid lpparameter);
dword winapi fun2proc(lpvoid lpparameter);
int tickets = 100;
handle hevent;
void main()
{handle hthread1;
handle hthread2;
//建立事件物件。引數2:true表示是人工重置事件物件,false表示自動重置事件物件;3:指定事件物件的初始狀態,true表示有訊號,反之;4:事件物件的名字,null表示匿名
hevent = createevent(null,false,true,null);
hthread1 = createthread(null,0,fun1proc,null,0,null);
hthread2 = createthread(null,0,fun2proc,null,0,null);
closehandle(hthread1);
closehandle(hthread2);
cout<
sleep(1);
cout<
sleep(1);
cout注意點:
主要函式:
示例**如下:
#include#includedword winapi fun1proc(lpvoid lpparameter);
dword winapi fun2proc(lpvoid lpparameter);
int tickets = 100;
critical_section g_cs;
void main()
{handle hthread1;
handle hthread2;
hthread1 = createthread(null,0,fun1proc,null,0,null);
hthread2 = createthread(null,0,fun2proc,null,0,null);
closehandle(hthread1);
closehandle(hthread2);
//初始化關鍵**段--相當於建造乙個**亭
initializecriticalsection(&g_cs);
cout<
sleep(1);
cout<
sleep(1);
cout注意點:
在編寫多執行緒同步時,很容易發生執行緒死鎖。哲學家進餐問題可以形象的描述執行緒死鎖現象:有多位哲學家在一起吃飯,每個人只有一根筷子,無法吃飯。大家都希望其他哲學家可以交出筷子讓自己先吃飯,最後只能乾瞪眼盯著桌上的美食挨餓。
在多執行緒中,如果執行緒1擁有臨界區物件a,並且等待獲取臨界區物件b,而執行緒2擁有臨界物件b,並且還在等待獲取臨界物件a,就造成了死鎖。
C 執行緒同步 (學習筆記)
1.利用mutex 互斥物件 2.利用event 事件物件 3.利用臨界區 critical section 效率更高 4.利用semaphore訊號量 filename semaphore test.cpp author jarvischu date 2012 11 22 include incl...
C 執行緒同步
volatile是最簡單的一種同步方法,當然簡單是要付出代價的。它只能在變數一級做同步,volatile的含義就是告訴處理器,不要將我放入工作記憶體,請直接在主存操作我。www.bitscn.com 因此,當多執行緒同時訪問該變數時,都將直接操作主存,從本質上做到了變數共享。能夠被標識為volati...
c 執行緒同步
以乙個程式來說明執行緒不同步所帶來的問題 class program private int counter 0 private void actionmethod t thread.currentthread.name,counter 結果如下 從上面的結果中可以看到主線程和子執行緒都在爭奪act...