多线程之原子操作
来源:互联网 发布:西安软件行业 编辑:程序博客网 时间:2024/04/30 10:32
原子操作:执行过程不被打断;(要么不执行,要么执行完成)
linux上面支持32位数据,但是atomic_t(原子类型数据,类似于int)类型的数据只有24位是存放的数据,8位是锁,用来避免数据并发访问。(浪费了一部分
的存储空间,但是相对于其他复杂的锁机制,对系统的开销小,对高速缓存行影响也小)
linux内核也提供了一系列的原子位操作接口。详细内容可以参考(linux内核设计)
(图片来自:linux内核设计)
原子操作用的比较多的应该是计数器;
volatile long loadNum = 0;
const int threadNum = 51;
DWORD WINAPI increment(void *){
Sleep(10);
loadNum++;
// InterlockedIncrement(&loadNum); //原子操作
Sleep(10);
return 0;
}
void test(){
int num = 110;//建议数字大点,数字小了可能看不到效果
while(num--){
loadNum = 0;
HANDLE handle[threadNum];
for(int i = 0; i < threadNum; i++){
handle[i] = CreateThread(NULL, 0, increment, NULL, 0, NULL);//创建线程;(CreateThread与_beginthreadex本质区别)
}
WaitForMultipleObjects(threadNum, handle, true, INFINITE);
cout << "登陆人数:" << loadNum << endl;
}
}
环境:win7 vs2010;(原子操作linux和windows原理差不多。)
不用原子操作:会出现loadNum 小于51的情况;
用原子操作:打印结果都是51;避免了同时访问;
- 多线程之原子操作
- 多线程 之原子操作
- Win32多线程之原子操作
- 多线程----原子操作
- windows多线程--原子操作
- 多线程与原子操作
- 多线程-原子操作
- windows多线程--原子操作
- 多线程-原子操作
- 多线程原子操作:AtomicBoolean
- C# 多线程--原子操作
- 多线程之原子锁
- 多线程之三 原子操作 Interlocked系列函数
- C++ 之 原子操作 Interlocked系列函数多线程(四)
- java多线程之线程并发库原子性操作类
- java多线程之synchornized原理以及原子操作探究学习
- 多线程锁和原子操作
- 多线程环境中的原子操作
- 第七周项目一深复制体验(1)
- 7.8 Converting Longitude and Latitude to a Meaningful Address
- 10大清宿便排毒方法及简单排毒瘦小腹运动
- Android开发の五大布局
- PHP连接SAE平台MYSQL
- 多线程之原子操作
- Statement和PreparedStatement区别
- 黑马程序员——IOS基础——Block
- 2014-第七周项目一---体验深复制
- 通过Excel直接操作数据库DB的工具
- javax.validation.UnexpectedTypeException: No validator could be found for type: java.lang.Integer
- Unit6--ptoblem1-深复制
- 使用Jquery Ajax的webservice请求来实现更简练的Ajax
- Libcurl简明使用指南