10000字讲透C++无锁编程:看完就能写出自己的无锁队列
一、多线程编程,绑不开的锁
写多线程程序,最头疼的是什么?数据竞争。
两个线程同时读写同一块内存,结果就是灾难——一个线程刚把计数器读出来准备加1,另一个线程也读了同样的值,两个线程各自加完再写回去,本该加2的计数器只加了1。这种Bug藏得深,复现难,调起来能让人怀疑人生。
解决方案很直接:加锁。
std::mutex mtx;intcounter=0;voidincrement(){std::lock_guard写多线程程序,最头疼的是什么?数据竞争。
两个线程同时读写同一块内存,结果就是灾难——一个线程刚把计数器读出来准备加1,另一个线程也读了同样的值,两个线程各自加完再写回去,本该加2的计数器只加了1。这种Bug藏得深,复现难,调起来能让人怀疑人生。
解决方案很直接:加锁。
std::mutex mtx;intcounter=0;voidincrement(){std::lock_guard