线程同步的几种方法
来源:互联网 发布:阿里云上传域名证书 编辑:程序博客网 时间:2024/06/07 22:24
1:临界区(关键段)
2:互斥量
3:事件
4:信号量
int g_count = 0;
//CRITICAL_SECTION g_cs;//HANDLE g_hMutex = NULL;
//HANDLE g_hEvent = NULL;
HANDLE g_hSemaphore = NULL;
DWORD WINAPI threadFun1(LPVOID lpParam)
{
while (true)
{
//EnterCriticalSection(&g_cs);
//WaitForSingleObject(g_hMutex, INFINITE);
//WaitForSingleObject(g_hEvent, INFINITE);
WaitForSingleObject(g_hSemaphore, INFINITE);
cout << "th1:" << g_count++ << endl;
//LeaveCriticalSection(&g_cs);
//ReleaseMutex(g_hMutex);
//SetEvent(g_hEvent);
ReleaseSemaphore(g_hSemaphore,1,NULL);
Sleep(50);
}
return 0;
}
DWORD WINAPI threadFun2(LPVOID lpParam)
{
while (true)
{
//EnterCriticalSection(&g_cs);
//WaitForSingleObject(g_hMutex, INFINITE);
//WaitForSingleObject(g_hEvent, INFINITE);
WaitForSingleObject(g_hSemaphore, INFINITE);
cout << "th2:" << g_count++ << endl;
//LeaveCriticalSection(&g_cs);
//ReleaseMutex(g_hMutex);
//SetEvent(g_hEvent);
ReleaseSemaphore(g_hSemaphore, 1, NULL);
Sleep(50);
}
return 0;
}
int main()
{
//InitializeCriticalSection(&g_cs);
//g_hMutex = CreateMutex(NULL, FALSE, L"g_hMutex");
//g_hEvent = CreateEvent(NULL, FALSE, TRUE, L"g_hEvent");
g_hSemaphore = CreateSemaphore(NULL, 1, 1, L"g_hSemaphore");
CreateThread(NULL, 0, threadFun1, NULL, 0, NULL);
CreateThread(NULL, 0, threadFun2, NULL, 0, NULL);
while (true);
system("pause");
return 0;
}
阅读全文
0 0
- 实现线程同步的几种方法
- C#线程同步的几种方法
- C#线程同步的几种方法
- C#线程同步的几种方法
- C#线程同步的几种方法
- C#线程同步的几种方法
- C#线程同步的几种方法
- 线程同步的几种方法
- 线程同步的几种方法
- C#线程同步的几种方法
- 线程同步的几种方法
- C#线程同步的几种方法
- C#线程同步的几种方法
- C#线程同步的几种方法
- C#线程同步的几种方法
- C#线程同步的几种方法
- Qt同步线程的几种方法
- C#线程同步的几种方法
- RxVolley使用文档—— RxVolley = Volley + RxJava + OkHttp
- Fiddler抓包使用教程-QuickExec
- 方法重写与重载
- Flask + Requests查询火车票
- bytebuffer获得byte[]的操作
- 线程同步的几种方法
- Element Send Keys is broken with Firefox 53 or newer
- linux下c/c++实例之十四c实现的bt软件下载
- CentOS 7 切换图形化启动和命令行启动
- oracle强制中止运行的job
- libsvm 使用心得
- vc中for循环中多变量初始化的坑
- 同一个activity下的两个子fragment的数据传输
- ifneq (,$(filter $(strip $(TARGET_BOARD_PLATFORM)), mt6735m mt6737m))