让我们假设我有一些线程安全的类。它使用std::shared_mutex
来防止并发访问。只读操作使用std::shared_lock
,写操作使用std::scoped_lock
。
现在,对于复制分配运算符,必须锁定分配给被分配者和对象的互斥体,除了被分配者被修改并且必须以std::shared_lock
锁定其互斥体时,分配对象才被锁定。只读,必须使用std::scoped_lock
锁定。据我所知,不使用特定的锁排序算法锁定多个互斥锁可能会导致死锁。
通常可以使用std::lock
或std::scoped_lock
来避免死锁,但是在这种情况下,不能使用死锁,因为std::shared_mutex
中的一个不能为{{1} } ed,但lock
ed。
如何锁定多个锁以避免死锁,死锁是其中一些是共享的,有些不是共享的?