如果我想在C#中锁定某些内容,我会这样做
private readonly object _listManagerLock = new object();
lock (_listManagerLock)
{
Console.WriteLine("startin determening");
AssignArray(log._algorithm);
Console.WriteLine("ending determening");
}
完全线程安全,不会出错。有没有办法在C ++中实现呢?
答案 0 :(得分:9)
C ++没有与lock
关键字等效的关键字。您需要创建一个std::mutex
实例,并将其锁定:
private:
std::mutex _listManagerLock;
// ...
您可以手动锁定和解锁它:
_listManagerLock.lock();
// ...
_listManagerLock.unlock();
但是不建议这样做,因为在某些情况下(例如,抛出异常或仅忘记unlock()
时),互斥锁可能会锁定。相反,您应该使用std::lock_guard:
std::lock_guard<std::mutex> lock(_listManagerLock);
// ...
当退出当前范围时,锁将自动释放。要强制作用域并获取与C#代码等效的内容,您可以这样做:
{
std::lock_guard<std::mutex> lock(_listManagerLock);
// ...
}