C++多线编程通过上一节介绍的Release-Acquire抽象语义来保证共享变量的读写顺序,避免编译器/CPU乱序等的影响,除此之外我们还需要考虑多线程间同步的实现,本节我们介绍一下如何实现多线程同步。主要通过互斥锁和条件变量来实现
給出一段实例代码
#include <iostream> #include <thread> #include <mutex> #include <condition_variable> #include <vector> std::condition_variable cv_start; std::mutex mtx; bool start_flag = false; // 条件,必须mutex保护 void worker(int id) { std::unique_lock<std::mutex> lock(mtx); cv_start.wait(lock, [](){ return start_flag; }); // wait返回后,依然持有mtx;这里尽快释放锁,不要拿着锁做业务 lock.unlock(); // 业务逻辑:多个线程被唤醒后并发执行 std::cout << "thread " << id << " started work\n"; std::this_thread::sleep_for(std::chrono::milliseconds(200)); std::cout << "thread " << id << " finished\n"; } int main() { const int thr