我有多线程程序,启用状态和队列很齐全,所以我将使用像下面这样的互斥方法
{std::lock_guard<std::mutex> lock_en(eventLogMutex);en = enable;}
我的问题,我应该使用不同的互斥锁保护来启用和队列,比如
{
std::lock_guard<std::mutex> lock_queue(eventLogMutex);
....
}
和
{
std::lock_guard<std::mutex> lock_en(eventLogMutex);
...
}
感谢的
答案 0 :(得分:0)
是的,你应该。 lock_guard
依赖RAII来锁定和解锁互斥锁 - 当它超出范围时,互斥锁会自动释放。如果将lock_guard
作为成员变量,使用它将毫无意义。您应该尽可能将范围中的lock_guard
定义为最接近受保护代码 - 在实际需要锁定之前对其进行初始化,并在完成互斥锁后立即将其超出范围。