03 std::lock_guard 与 std::unique_lock
锁
01 std::unique_lock对mutex进行自动加解锁, 比lock_guard更加灵活。
mutex m;
void fun()
{
// std::try_to_lock 可以避免一些不必要的等待,会判断当前mutex能否被上锁,如果不能被lock,可以先去执行其他代码。
std::unique_lock<std::mutex> mlock(m, std::try_to_lock);
if (mlock.owns_lock() == true) {
// to do ...
}
else {
// to do other
}
}
线程没有 m 的所有权,根据块语句的 m 实现自动加解锁。
线程根据 m 属性,来判断是否可以加锁、解锁。
02 std::lock_guard对mutex进行自动加解锁。
void fun()
{
lock_guard<mutex> mlock(m);
}
线程拥有 m 的所有权,实现自动加解锁。
线程读取 m 失败时,则一直等待,直到读取成功。
线程会把 m 一直占有,直到当前线程完成才释放,其它线程才能访问。