繁体   English   中英

何时使用C ++ 11互斥锁,锁,unique_lock,shared_lock等

[英]When to use C++11 mutex, lock, unique_lock, shared_lock, etc

  1. shared_lockshared_mutex.lock_shared()之间的区别除了shared_lock的析构函数可以解锁关联的互斥锁以外,还有什么区别?
  2. shared_mutex是我可以与shared_lock使用的唯一互斥体类吗?
  3. 为什么有人要使用lock_guard而不是unique_lock
  4. 如果我有许多线程不断锁定以读取( shared_lock )变量,而我有一个变量试图锁定该变量以进行写入( unique_lock ),那么该写入线程的优先级是否高于其他线程?
  5. 对于#4,是否有可能出现死锁?
  1. shared_mutex.lock_shared()是一个函数调用,用于以共享模式锁定shared_mutex ,而shared_lock是一个“锁类”,用于在作用域末尾锁定和自动解锁互斥锁。

  2. 不,您可以将shared_lock与满足SharedMutex要求的任何类型一起使用。

  3. 除非您需要unique_lock其他功能,否则请始终使用lock_guard 这样,您的意图就更加清楚了。

  4. 这不取决于shared_lockunique_lock ,而是SharedMutex您所使用的SharedMutex 标准未指定确切的行为。 但是这里有一些线索:

    • 在Windows上, shared_lock通常将使用SRWLOCK来实现,并试图做到公平,例如,将尝试平衡读者和作家。 在这里,没有人会拥有更高的优先级。
    • 在POSIX系统上, shared_mutex最有可能在pthread_rwlock_t之上实现,并且实现通常会优先考虑读取器,因为它需要支持递归读取锁。
    • Boost shared_mutex试图做到公平,并且不偏向任何一方。
  5. 如果始终有至少一个读取器持有该锁,则使用shared_mutex读取器的shared_mutex可能会使您的shared_mutex器线程从不获取该锁。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM