C++自增操作与原子性
int自增操作到底是不是原子性?验证了下答案是否定的,当多线程遇到简单的自增操作时会出现问题,比如开启很多个线程同时对一个int自增后结果会随着系统负载出现不同的结果。
代码验证:
在我的机子上很荣幸看到了次执行结果不对的情形,红色框说明简单的自增操作不是线程安全的。
那么如何做到线程安全的呢?
首先想到的就是采用互斥量,类中添加互斥量作为成员可以保护类的其它成员,此法可行,可发扬光大。但是注意的时互斥量不能保护这个对象,即会出现析构竞态,扯远了....
第二个:对于这个问题可以用atomic_t变量,采用atomic_系列函数操作atomic_t是原子操作(要么不做要么一步做完)