【发布时间】:2021-02-08 07:49:23
【问题描述】:
给定这个函数:
#include <mutex>
std::mutex mut;
bool data_being_processed=false;
void process_data() {
std::lock_guard<std::mutex> lock(mut);
if (data_being_processed == false) {
data_being_processed = true;
// Process data
data_being_processed = false;
}
}
我的理解是 process_data 不会被多个线程同时执行。但是它有效率吗? if (var=x) {var=y} 原子有没有更好的方法?
【问题讨论】:
-
考虑将
data_being_processed设为原子值,或std::condition_variable -
您的互斥锁应该已经锁定,因此没有其他线程可以执行相同的过程。没有理由额外检查。那就是“互斥”代表:“互斥”
标签: c++ concurrency