博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++多线程中用临界区控制全局变量的访问冲突问题
阅读量:7112 次
发布时间:2019-06-28

本文共 1671 字,大约阅读时间需要 5 分钟。

困扰了我很长时间的多线程访问全局变量今天终于解决了,所以得记录一下。。控制全局变量的方法很多,有信号量、临界区等。。这里我记录一个用临界区控制访问冲突的例子。非常好用。

#include 
#include
using namespace std; //首先做两个线程,实现两个线程间的同步 上次是利用互斥对象实现线程间的同步CreateMutex函数和事件对象间的同步CreateEvent函数,这次用关键代码段(临界区对象)来实现 DWORD WINAPI Fun1Proc(LPVOID lpParameter); DWORD WINAPI Fun2Proc(LPVOID lpParameter); int tickets=100; CRITICAL_SECTION g_cs; //1.定义一个临界区对象 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);   InitializeCriticalSection(&g_cs); //2.初始化临界对象   Sleep(4000);   DeleteCriticalSection(&g_cs); //3.当函数要结束的时候释放所有没有被拥有的临界区对象相关的成员 } DWORD WINAPI Fun1Proc(LPVOID lpParameter) { while(TRUE) { EnterCriticalSection(&g_cs); //4.判断是否有线程在访问公共资源,如果有线程正在访问就,不能执行下面的 if(tickets>0) { Sleep(1); cout<<"Thread1 sell tickets:"<
<
0) { Sleep(1); cout<<"Thread2 sell tickets:"<
<

 

转载地址:http://jcmhl.baihongyu.com/

你可能感兴趣的文章
我的友情链接
查看>>
Kali 2016 系统更新
查看>>
子网数、主机数与子网掩码的关系
查看>>
大话bashshell脚本编程
查看>>
30个php操作redis常用方法代码例子 --转自脚本之家
查看>>
linux-overcommit_memory
查看>>
shell脚本中执行mysql语句的方法
查看>>
expr: non-numeric argument
查看>>
CQL使用
查看>>
android里的makefile
查看>>
我的友情链接
查看>>
烂泥:通过SSH终端管理ESXI虚拟机
查看>>
Bug解决手顺
查看>>
python pitfall (陷阱)--不同平台os模块文件名排序
查看>>
快速在线转换图片文件格式
查看>>
linux grep awk sed find cut
查看>>
TPYBoardv202自制微信远程智能温湿度计
查看>>
投诉数千起 共享单车押金为啥难退
查看>>
搭建一个类似线上的线下测试环境
查看>>
go接口测试
查看>>