多线程没加锁, 死机, 是不是与cpu性能成反比

ma100 2013-07-27 02:29:54
下面的这个代码
vector<int> a;


a.push_back ( 3 );

if ( a.size() == 1 )
...


如果加锁没问题, 不加的话在比较好的cpu就比较难死机(<0.1%), 比较差的时候(ARM9)有10%概率死机.

是不是所有的多线程冲突都是与cpu成反比的

那我们是不是可以找一个元老级的cpu来测试我们的程序, 更容易发现问题呢?
...全文
216 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
大尾巴猫 2013-08-04
  • 打赏
  • 举报
回复
引用 楼主 ma100 的回复:
下面的这个代码 vector<int> a; a.push_back ( 3 ); if ( a.size() == 1 ) ... 如果加锁没问题, 不加的话在比较好的cpu就比较难死机(<0.1%), 比较差的时候(ARM9)有10%概率死机. 是不是所有的多线程冲突都是与cpu成反比的 那我们是不是可以找一个元老级的cpu来测试我们的程序, 更容易发现问题呢?
速度快的cpu一个时间片执行的代码多,即同样的代码切换次数少。发生冲突可能性低了。 要测试冲突的话,线程设置更多,用更多核心的cpu,应该能造成更大概率冲突。
max_min_ 2013-08-04
  • 打赏
  • 举报
回复
引用 6 楼 ma100 的回复:
示例代码比如 有 vector<int> a; a.push_back(1); cout << a[0]; a.clear; 这段代码被2个线程调用就可能错误 加锁那个我是猜的, 因为我用gdb调试程序时, 当有lock.enter/ leave时, gdb会提示一个进程被创建/销毁 不是操作系统死机, 是应用程序死机
这里相当于作写操作了,如果有可能是两个线程一起调用的话,最好还是加个锁比较安全一点! 如果不是特意去搞操作系统的话,你的应用程序很难把操作系统搞死的
todd_leftcode 2013-08-04
  • 打赏
  • 举报
回复
那么我明白你说的是程序崩溃,不是系统无响应。 这个应该说不成比例吧。 CPU太快,也有可能导致并发机率上升从而增加崩溃概率
lm_whales 2013-08-04
  • 打赏
  • 举报
回复
无锁死机,都是程序错误造成的。
大尾巴猫 2013-07-29
  • 打赏
  • 举报
回复
stl的容器都不是线程安全的,如果在多线程下要运行良好,加锁是必要的吧。 程序首先是要正确,然后才是效率。
ma100 2013-07-29
  • 打赏
  • 举报
回复
示例代码比如 有 vector<int> a; a.push_back(1); cout << a[0]; a.clear; 这段代码被2个线程调用就可能错误 加锁那个我是猜的, 因为我用gdb调试程序时, 当有lock.enter/ leave时, gdb会提示一个进程被创建/销毁 不是操作系统死机, 是应用程序死机
turing-complete 2013-07-27
  • 打赏
  • 举报
回复
引用 4 楼 ma100 的回复:
不是偷懒, 主要是没养成习惯 死机原因比如 vector是空的, 但另外一个线程访问里面元素, 诸如此类. linux系统, 主要嵌入式c++程序, 没搞内核. 加锁貌似是通过开进程实现的, 所以频繁的加锁/解锁确实挺占cpu的, 尤其对arm9档次的 我现在的做法是对简单变量, 如int, 不加 对简单结构体操作, 看情况, 一般10个字节一下的, 不加 对大结构体, 容器, socket加, 因为这些个元素都曾经让我受伤过.
看了您这段话,我有三个疑问: 1. “一个空vector,另一个线程去读则会死机”,能给出点示例代码吗? 2. “加锁是通过开进程实现的”,这个观点太奇葩了,我第一次听说,能说说出处吗。 3. 您不在内核态开发,能把操作系统搞死机,这是什么版本的Linux系统?
ma100 2013-07-27
  • 打赏
  • 举报
回复
不是偷懒, 主要是没养成习惯 死机原因比如 vector是空的, 但另外一个线程访问里面元素, 诸如此类. linux系统, 主要嵌入式c++程序, 没搞内核. 加锁貌似是通过开进程实现的, 所以频繁的加锁/解锁确实挺占cpu的, 尤其对arm9档次的 我现在的做法是对简单变量, 如int, 不加 对简单结构体操作, 看情况, 一般10个字节一下的, 不加 对大结构体, 容器, socket加, 因为这些个元素都曾经让我受伤过.
turing-complete 2013-07-27
  • 打赏
  • 举报
回复
我想问下您用什么操作系统? 您在搞内核吗? 怎么直接talk to cpu的
qq120848369 2013-07-27
  • 打赏
  • 举报
回复
没加锁死机了啊? 死机原因没看吗,CPU跑满了还是内存没了,总会有个死机的理由的。
大尾巴猫 2013-07-27
  • 打赏
  • 举报
回复
啥意思? 想偷懒不用锁? 安全第一,共享资源多线程改锁就锁,不能手软。

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧