读书人

C++从增操作与原子性

发布时间: 2013-10-22 16:17:14 作者: rapoo

C++自增操作与原子性

int自增操作到底是不是原子性?验证了下答案是否定的,当多线程遇到简单的自增操作时会出现问题,比如开启很多个线程同时对一个int自增后结果会随着系统负载出现不同的结果。

代码验证:


在我的机子上很荣幸看到了次执行结果不对的情形,红色框说明简单的自增操作不是线程安全的。

那么如何做到线程安全的呢?

首先想到的就是采用互斥量,类中添加互斥量作为成员可以保护类的其它成员,此法可行,可发扬光大。但是注意的时互斥量不能保护这个对象,即会出现析构竞态,扯远了....

第二个:对于这个问题可以用atomic_t变量,采用atomic_系列函数操作atomic_t是原子操作(要么不做要么一步做完)

读书人网 >C++

热点推荐