C++线程同步之原子操作
2024-09-01 15:24:40
所谓的原子操作就是指一个线程对于某一个资源做操作的时候能够保证没有其它的线程能够对此资源进行访问。
原子操作仅仅能够解决某一个变量的问题,只能使得一个整型数据做简单算术运算的时候是原子的。
以下案例需要在Debug模式下测试。
#include<iostream>
#include<windows.h>
using namespace std; long g_num; DWORD WINAPI ThreadProc1(LPVOID lpParameter)
{
// InterlockedExchangeAdd 为一个整型变量以原子方式加上一个数
// InterlockedExchange 将一个32位数以原子方式赋值给另外一个数
// InterlockedExchange64 将一个64位数以原子方式赋值给另外一个数
// InterlockedCompareExchange 如果两个数相等,就将另一个数赋值,不相等无效果 for (int i = ; i < ; i++)
{
// InterlockedIncrement 给一个整形变量自增1
InterlockedIncrement(&g_num);
// g_num++;
}
return ;
} DWORD WINAPI ThreadProc2(LPVOID lpParameter)
{
for (int i = ; i < ; i++)
{
// InterlockedIncrement 给一个整形变量自增1
InterlockedIncrement(&g_num);
// g_num++;
}
return ;
} int main()
{
HANDLE hThread1 = NULL;
HANDLE hThread2 = NULL;
hThread1 = CreateThread(, , ThreadProc1, , , );
hThread2 = CreateThread(, , ThreadProc2, , , );
// WaitForSingleObject 叫做等待函数,他能够等待线程结束,线程结束这个函数才会返回(或者时间到了)否则就阻塞住。
WaitForSingleObject(hThread1, -);
WaitForSingleObject(hThread2, -);
cout << "g_num = " << g_num << endl;
getchar();
return ;
}
最新文章
- struts2 Result Type四个常用转跳类型
- Linux下一些文件夹的含义
- Android系统的常用权限
- 【HTML5】表单元素
- .NET开源工作流RoadFlow-系统布署中常见错误及处理方法
- ◆linux分区的加密与自动解密◆——Super孟再创辉煌
- C++ 操作法重载
- iOS相机去黑框
- Linux 常用命令解析和Bash Shell使用示例脚本演示
- 【功能代码】---4用JS获取地址栏参数方法
- 如何将生产环境的字段类型从INT修改为BIGINT
- mysql字段默认值不生效的问题解决(上)
- Go基础系列:互斥锁Mutex和读写锁RWMutex用法详述
- 【已解决】gradle project refresh failed:connection refused
- [转]xml解析工具的效率比较QDomDocument、TinyXml-2、RapidXml、PugiXml
- POJ 2894
- 无法获取链接服务器 ";XXX"; 的 OLE DB 访问接口 ";SQLNCLI10"; 的架构行集 ";DBSCHEMA_TABLES_INFO";。该访问接口支持该接口,但使用该接口时返回了失败代码。
- AxonFramework
- 微软BI 之SSAS 系列 - 多维数据集中度量值设计时的聚合函数 (累加性_半累加性和非累加性)
- ios 真机测试与发布详细流程,基于最新的开发者网站,ios7,xcode5(有截图的哦)[[[第一部分真机测试]]]
热门文章
- 阶段5 3.微服务项目【学成在线】_day18 用户授权_01-用户授权业务流程分析
- 前后端分离session不一致问题
- windows 10 enterprize LTSC
- Redis高级功能 - 慢查询日志
- JS 回车提交,兼容IE、火狐、Opera、Chrome、Safari……
- react——Table组件列中靠左 靠右对齐解决方案
- iOS技术面试04:数据存储
- iOS-NSBundle、NSArray、NSDictionay
- sed练习,一些sed常用方法
- js类似新闻图片轮换(带有文字介绍,其实可以放任何内容)