HANDLE hMutex;int main(){ hMutex = CreateMutex(NULL,TRUE,TEXT("tickets")); if(hMutex){ if(GetLastError()== ERROR_ALREADY_EXISTS){ cout<<"已存在运行实例"<<endl; system("pause"); return 0; } } 互斥对象(Mutex)、事件对象(Event) 与 关键代码段(CriticalSection) 的比较1.互斥对象和事件对象都属于内核对象,利用内 Read More
#include <windows.h>#include <iostream>using namespace std;DWORD WINAPI MyThreadProc1(LPVOID lpParameter); //thread dataDWORD WINAPI MyThreadProc2(LPVOID lpParameter);int tickets=100;CRITICAL_SECTION g_cs;int main(){ DWORD tid1=0,tid2=0; HANDLE handle1 = CreateThread(NULL,0,MyThreadProc1 Read More
为了实现线程间的同步,不应该使用人工重置的事件对象,而应该使用自动重置的事件对象。g_hEvent = CreateEvent(NULL,FALSE,TRUE,NULL);注意区分人工重置事件对象和自动重置事件对象。当人工重置的事件对象得到通知时,等待该事件对象的所有线程均变为可调度线程,操作系统不会将该事件对象设置为无信息状态,需要显式地调用ResetEvent函数将其设置为无信号状态,否则该对象一直是有信号状态。当一个自动重置的事件对象得到通知时,等待该事件对象的线程中只有一个线程变为可调度线程,同时操作系统会将该事件对象设置无信号状态,这样,当对所保护的代码的执行完成后,需要调用SetE Read More