[C++]Windows下兩個Thread之間的同步 - 使用Event


Thread是很常用的並行處理方法,為的是不讓主程式在特定時候被Hang住,不過一旦thread開啟了很多,彼此又有一些情況如果有關同步,沒有控制好,就可能會造成資料有問題。比方說(AB分別代表2個thread):

  • B要使用A處理完的結果,所以要等A
  • AB都共用一個資料,但此資料同時只能有一方存取

在Windows底下,Event是最簡單的同步方法,完全由User手動來控制決定。設定的函數有:

  • CreateEvent:建立一個事件
  • SetEvent:觸發這個事件,使其有信號,通常表示事件完成了。
  • ResetEvent:把這個事件設成無信號,未被觸發狀態。

那我們怎麼實現共用呢?就用WaitForSingleObject()函數。

DWORD WINAPI Thread1(LPVOID lParam){
 WaitForSingleObject(hEvent2,INFINITE);//等待event2完成
 ResetEvent(hEvent2);
 //作一些事情
 SetEvent(hEvent1);//設定event1完成
 return 0;
}

DWORD WINAPI Thread2(LPVOID lParam){
 WaitForSingleObject(hEvent1,INFINITE);//等待event1完成
 ResetEvent(hEvent1);
 //作一些事情
 SetEvent(hEvent2);//設定event2完成 
 return 0;
}

void main(){
 hEvent1 = CreateEvent(NULL,TRUE,FALSE,"Event1");
 hEvent2 = CreateEvent(NULL,TRUE,FALSE,"Event2");

 SetEvent(hEvent1);
 SetEvent(hEvent2);

 hThread1 = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)&Thread1,NULL,0,0);
 hThread2 = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)&Thread2,NULL,0,0);
}


好像,就是這樣而已。
參考這一篇的。

0 意見:

搜尋此網誌

總網頁瀏覽量

TK呱呱

Made with by TK