免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: ctsweeper
打印 上一主题 下一主题

[C++]双重IF能带来lock调用开销最小的疑问。 [复制链接]

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:56:11
11 [报告]
发表于 2011-09-27 10:43 |只看该作者
防止多次分配。

论坛徽章:
0
12 [报告]
发表于 2011-09-27 10:53 |只看该作者
回复  ctsweeper

第一个if到lock()之间,有时间窗,操作系统可以进行任务调度。
假设线程A运行了第一个 ...
asuka2001 发表于 2011-09-27 10:36



   
    很详细,拜谢!
还想请教一下附加问题:1、这个lock()和unlock()之间也有时间窗,操作系统能否在这之间切换到其他任务。
                      2、如果可以切换到其他任务的话,那么这个lock()告诉其他进程的意思是 能读不能写 还是说完全看不到?

论坛徽章:
0
13 [报告]
发表于 2011-09-27 11:00 |只看该作者
除了volatile的问题外,另一个问题:
   lock(), unlock()没做到异常安全

这都啥误人子弟的修养

论坛徽章:
0
14 [报告]
发表于 2011-09-27 11:08 |只看该作者
除了volatile的问题外,另一个问题:
   lock(), unlock()没做到异常安全

这都啥误人子弟的修养
AD8018 发表于 2011-09-27 11:00



    呵呵,莫上火,这只是一个初级的例子而已。

论坛徽章:
0
15 [报告]
发表于 2011-09-27 11:12 |只看该作者
回复 12# ctsweeper


1、这个lock()和unlock()之间也有时间窗,操作系统能否在这之间切换到其他任务。
操作系统可以在任何时候进行调度,因此在lock()和unlock()之间也可能切换去执行其他任务。

2、如果可以切换到其他任务的话,那么这个lock()告诉其他进程的意思是 能读不能写 还是说完全看不到?
就算是切换到其它任务了,其它线程执行到lock()这里,也会因为之前已经有线程获得了该锁,导致当前线程阻塞
lock()和unlock()的作用就是保证这同时只能有一个线程执行里面的代码。

论坛徽章:
0
16 [报告]
发表于 2011-09-27 11:16 |只看该作者
回复  ctsweeper


1、这个lock()和unlock()之间也有时间窗,操作系统能否在这之间切换到其他任务。
操 ...
雨过白鹭洲 发表于 2011-09-27 11:12



    明白!呵呵

论坛徽章:
17
水瓶座
日期:2013-08-29 12:09:27白羊座
日期:2014-08-07 12:36:42丑牛
日期:2014-07-24 12:44:41寅虎
日期:2014-04-16 16:15:33寅虎
日期:2014-03-12 09:28:43摩羯座
日期:2014-03-06 13:22:04技术图书徽章
日期:2014-03-06 11:34:50天蝎座
日期:2014-01-09 11:31:44寅虎
日期:2013-12-27 17:01:44双子座
日期:2013-12-27 12:32:29双子座
日期:2013-12-25 09:03:33丑牛
日期:2013-12-24 16:18:44
17 [报告]
发表于 2011-09-27 11:58 |只看该作者
除了volatile的问题外,另一个问题:
   lock(), unlock()没做到异常安全

这都啥误人子弟的修养
AD8018 发表于 2011-09-27 11:00


异常安全???我没有注意到哪里有抛出异常的代码啊,这里指什么?
还是说LZ的lock()和unlock()中会抛出异常?那也没看到有catch啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP