义乌专利申请去哪里?:多线程的那点儿事(之原子锁)
来源:百度文库 编辑:偶看新闻 时间:2024/04/29 07:38:30
多线程的那点儿事(之原子锁)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】原子锁是多线程编程中的一个特色。然而,在平时的软件编写中,原子锁的使用并不是很多。这其中原因很多,我想主要有两个方面。第一,关于原子锁这方面的内容介绍的比较少;第二,人们在编程上面习惯于已有的方案,如果没有特别的需求,不过贸然修改已存在的代码。毕竟对很多人来说,不求有功,但求无过。保持当前代码的稳定性还是很重要的。
其实,早在《多线程数据互斥》这篇博客中,我们就已经介绍过原子锁。本篇博客主要讨论的就是原子锁怎么使用。中间的一些用法只是我个人的一些经验,希望能够抛砖引玉,多听听大家的想法。
(1)查找函数中原子锁
在一些函数当中,有的时候我们需要对满足某种特性的数据进行查找。在传统的单核CPU上,优化的空间比较有限。但是,现在多核CPU已经成了主流配置。所以我们完全可以把这些查找工作分成几个子函数分在几个核上面并行运算。但是,这中间就会涉及到一个问题,那就是对公共数据的访问。传统的访问方式,应该是这样的,
view plainprint?
- unsigned int count = 0;
- int find_data_process()
- {
- if(/* data meets our standards */){
- EnterCriticalSection(&cs);
- count ++;
- LeaveCriticalSection(&cs);
- }
- }
我们看到代码中间使用到了锁,那么势必会涉及到系统调用和函数调度。所以,在执行效率上会大打折扣。那么如果使用原子锁呢?
view plainprint?
- unsigned int count = 0;
- int find_data_process()
- {
- if(/* data meets our standards */){
- InterLockedIncrement(&count);
- }
- }
有兴趣的朋友可以做这样一道题目,查看0~0xFFFFFFFF上有多少数可以被3整除?大家也可以验证一下用原子锁代替临界区之后,代码的效率究竟可以提高多少。关于多核多线程的编程,朋友们可以参考《多线程基础篇》这篇博客。
(2)代码段中的原子锁
上面的范例只是介绍了统计功能中的原子锁。那么怎么用原子锁代替传统的系统锁呢?比如说,假设原来的数据访问是这样的,
- void data_process()
- {
- EnterCriticalSection(&cs);
- do_something();
- LeaveCriticalSection(&cs);
- }
view plainprint?
- unsigned int lock = 0;
- void data_process()
- {
- while(1 == InterLockedCompareExchange(&lock, 1, 0));
- do_something();
- lock = 0;
- }
这里用原子锁代替普通的系统锁,完成的功能其实是一样的。那么这中间有什么区别呢?其实,关键要看do_something要执行多久。打个比方来说,现在我们去买包子,但是买包子的人很多。那怎么办呢?有两个选择,如果卖包子的人手脚麻利,服务一个顾客只要10秒钟,那么即使前面排队的有50个人,我们只要等7、8分钟就可以,这点等的时间还是值得的;但是如果不幸这个卖包子的老板服务一个顾客要1分钟,那就悲催了,假使前面有50个人,那我们就要等50多分钟了。50分钟对我们来说可是不短的一个时间,我们完全可以利用这个时间去买点水果,交交水电费什么的,过了这个时间点再来买包子也不迟。
原子与原子核的体积之比
多线程技术是什么意思,vc里面的多线程
迅雷的多线程补丁.
初学者的多线程问题
多线程的问题
请问大家钥玛锁,月牙锁,和金点原子的锁,那给好一些?
ID是什么呀 (专业点儿的)
怎样求几个分子的平均原子数之比?
在哪下载多线程数(10以上)的网际快车??
:)期待为我们的婚礼出点儿谋划点儿策,有喜糖的,呵呵
大学中可以考的认证(实际点儿 有用点儿)都有那些?
1~18号元素的原子中,核电荷数之差8的两种原子________
多线程下载的原理是什么
最小的多线程浏览器是什么?
问个用多线程下载的问题?
关于Java多线程的问题
那个浏览器是多线程的?
有谁知道大庆哪有卖金点原子锁的?
来点儿童年的
以氧原子为例说明构成原子的粒子有那几种,为什么整个原子不显电性?
谁有《百万富翁的初恋》里男主角穿那双鞋的图片 大点儿的
去过宣武门沃尔玛的给点儿评价(北京)
0351-405024*是哪儿的电话?(具体点儿)
那位大哥,大姐告诉我,如何申请专利的程序啊?我要详尽点儿的?