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 一直占有,直到当前线程完成才释放,其它线程才能访问。
posted @ 2018-12-09 19:21  osbreak  阅读(353)  评论(0编辑  收藏  举报