条件竞争
- 定义:指多个线程或者进程在读写一个共享数据时结果依赖于它们执行的相对时间的情形 --百度百科
- 产生条件:取决于一个线程以上的相对运行顺序,每个线程都抢着完成自己的任务
- 避免方法:原子操作、互斥量
C++互斥量
- 直接使用
类声明:
std::mutex
类成员:lock() unlock()
特点:必须记住要在函数出口调用unlock()
.
- 借助RAII类模板:
std::lock_guard<>
实例化:
std::lock_guard<std::mutex>
类成员:lock() unlock() try_lock
特点:实例化并初始化时如std::lock_guard<std::mutex> guard(mutex)
提供已上锁的互斥量,并在析构时解锁.
- 借助RAII类模板:
std::unique_lock<>
实例化:
std::unique_lock<std::mutex>
类成员:lock() unlock() try_lock
特点:使用更灵活,支持不同域中所有权的传递