下面的这个代码 vector<int> a; a.push_back ( 3 ); if ( a.size() == 1 ) ... 如果加锁没问题, 不加的话在比较好的cpu就比较难死机(<0.1%), 比较差的时候(ARM9)有10%概率死机. 是不是所有的多线程冲突都是与cpu成反比的 那我们是不是可以找一个元老级的cpu来测试我们的程序, 更容易发现问题呢?
示例代码比如 有 vector<int> a; a.push_back(1); cout << a[0]; a.clear; 这段代码被2个线程调用就可能错误 加锁那个我是猜的, 因为我用gdb调试程序时, 当有lock.enter/ leave时, gdb会提示一个进程被创建/销毁 不是操作系统死机, 是应用程序死机
不是偷懒, 主要是没养成习惯 死机原因比如 vector是空的, 但另外一个线程访问里面元素, 诸如此类. linux系统, 主要嵌入式c++程序, 没搞内核. 加锁貌似是通过开进程实现的, 所以频繁的加锁/解锁确实挺占cpu的, 尤其对arm9档次的 我现在的做法是对简单变量, 如int, 不加 对简单结构体操作, 看情况, 一般10个字节一下的, 不加 对大结构体, 容器, socket加, 因为这些个元素都曾经让我受伤过.
64,654
社区成员
250,484
社区内容
加载中
试试用AI创作助手写篇文章吧