執行緒同步之事件物件
阿新 • • 發佈:2020-08-13
執行緒同步: 讓執行緒協同步調,按照一定的先後次序來執行
當人工重置的事件得到通知時,等待該事件的所有執行緒均變為可排程執行緒。
當一個自動重置的事件得到通知時,等待該事件的執行緒中只有一個執行緒變為可排程執行緒。
參考:
多執行緒與事件物件
#include <windows.h> #include <iostream> using namespace std; DWORD WINAPI Fun1Proc( LPVOID lpParameter // thread data ); DWORD WINAPI Fun2Proc( LPVOID lpParameter // thread data ); int tickets = 100; HANDLE g_hEvent; 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); g_hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);//自動的、無訊號狀態 SetEvent(g_hEvent);//設定事件訊號為觸發 Sleep(4000); } DWORD WINAPI Fun1Proc( LPVOID lpParameter // thread data ) { while (TRUE) { WaitForSingleObject(g_hEvent, INFINITE); if (tickets>0) { Sleep(1); cout << "thread1 sell ticket : " << tickets << endl; tickets--; } else break; SetEvent(g_hEvent); } return 0; } DWORD WINAPI Fun2Proc( LPVOID lpParameter // thread data ) { while (TRUE) { WaitForSingleObject(g_hEvent, INFINITE); if (tickets>0) { Sleep(1); cout << "thread2 sell ticket : " << tickets << endl; tickets--; } else break; SetEvent(g_hEvent); } return 0; }