Windows核心编程条件变量
2021/11/24 7:13:29
本文主要是介绍Windows核心编程条件变量,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
#include"stdafx.h" #include<windows.h> #include<tchar.h> #include<vector> #include<iostream> #include<process.h> using namespace std; DWORD WINAPI ThreadProduce(PVOID pvParam); DWORD WINAPI ThreadUser1(PVOID pvParam); DWORD WINAPI ThreadUser2(PVOID pvParam); vector<int> ivec; SRWLOCK g_lock; SRWLOCK g_lock2; CONDITION_VARIABLE g_ConditionVar; int _tmain() { InitializeSRWLock(&g_lock); //初始化锁 HANDLE hThread1 = (HANDLE)_beginthreadex(NULL,0,(unsigned int(_stdcall *)(void*))ThreadProduce,NULL,0,0); HANDLE hThread2 = (HANDLE)_beginthreadex(NULL, 0, (unsigned int(_stdcall *)(void*))ThreadUser1, NULL, 0, 0); HANDLE hThread3 = (HANDLE)_beginthreadex(NULL, 0, (unsigned int(_stdcall *)(void*))ThreadUser2, NULL, 0, 0); CloseHandle(hThread1); CloseHandle(hThread2); CloseHandle(hThread3); _gettchar(); return 0; } DWORD WINAPI ThreadProduce(PVOID pvParam) { for (int i = 0; i < 10000; i++) { AcquireSRWLockExclusive(&g_lock); //获得SRW锁 ivec.push_back(i); ReleaseSRWLockExclusive(&g_lock);//释放SRW锁 WakeConditionVariable(&g_ConditionVar);//因为每次执行完push_back后,容器里卖弄就会必定至少有一个元素(生产者) //生产出东西了,这时候阻塞在Sleep*里面的线程就会被唤醒(读取者sleep线程) Sleep(1);//停一下,让读取者先读 } return 0; } DWORD WINAPI ThreadUser1(PVOID pvParam) { while (1) { AcquireSRWLockExclusive(&g_lock); while (ivec.empty()) { cout << "等待写入" << endl; //如果容器是空的,也就是没有内容可以读,那么让线程进入睡眠状态,一直到调用WakeConditionAllVariable(&g_ConditionVar) SleepConditionVariableSRW(&g_ConditionVar,&g_lock,INFINITE,0); } cout << "线程1:" << ivec.back() << endl; ivec.pop_back(); ReleaseSRWLockExclusive(&g_lock); } return 0; } DWORD WINAPI ThreadUser2(LPVOID pvParam) { while (1) { AcquireSRWLockExclusive(&g_lock); while (ivec.empty()) { cout << "等待写入2"<<endl; SleepConditionVariableSRW(&g_ConditionVar, &g_lock, INFINITE, 0); } cout << "线程2:" << ivec.back() << endl; ivec.pop_back(); ReleaseSRWLockExclusive(&g_lock); } return 0; }
这篇关于Windows核心编程条件变量的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15鸿蒙生态设备数量超8亿台
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?
- 2024-05-09这种运行结果里的10.100000001,怎么能最快改成10.1?