C++多线程同步技巧(四)--- 信号量

网友投稿 880 2022-11-16

C++多线程同步技巧(四)--- 信号量

C++多线程同步技巧(四)--- 信号量

简介

信号量是维护0到指定最大值之间的同步对象。信号量状态在其计数大于0时是有信号的,而其计数是0时是无信号的。信号量对象在控制上可以支持有限数量共享资源的访问,可以用于线程同步,预防死锁等领域。信号量的特点和用途可用下列几句话定义: (1)如果当前资源的数量大于0,则信号量有效; (2)如果当前资源数量是0,则信号量无效; (3)系统决不允许当前资源的数量为负值; (4)当前资源数量决不能大于最大资源数量。

##代码样例

//////////////////////////////////// FileName : SemaphoreDemo.cpp// Creator : PeterZheng// Date : 2018/10/24 11:10// Comment : The usage of "CreateSemaphore"//////////////////////////////////#pragma once#include #include #include #include using namespace std;DWORD WINAPI Func1(LPVOID lpParam);DWORD WINAPI Func2(LPVOID lpParam);HANDLE hSemaphore = NULL;int g_num = 0;DWORD WINAPI Func1(LPVOID lpParam){ while (g_num < 100) { LONG count = 0; WaitForSingleObject(hSemaphore, INFINITE); cout << "Count: " << g_num << endl; g_num++; Sleep(10); ReleaseSemaphore(hSemaphore, 1, &count); // 释放信号量 } return 0;}DWORD WINAPI Func2(LPVOID lpParam){ while (g_num < 100) { LONG count = 0; WaitForSingleObject(hSemaphore, INFINITE); cout << "Count: " << g_num << endl; g_num++; Sleep(10); ReleaseSemaphore(hSemaphore, 1, &count); } return 0;}int main(void){ hSemaphore = CreateSemaphore(NULL, 1, 100, "Sep"); // 创建信号量 HANDLE hThread[2] = { 0 }; hThread[0] = CreateThread(NULL, 0, Func1, NULL, 0, NULL); // 创建线程1 hThread[1] = CreateThread(NULL, 0, Func2, NULL, 0, NULL); // 创建线程2 WaitForMultipleObjects(2, hThread, TRUE, INFINITE); // 等待线程执行结束 system("pause"); return 0;}

参考文档

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Windows Server中企业证书服务的安装
下一篇:showdan
相关文章

 发表评论

暂时没有评论,来抢沙发吧~