提问人:Xin_Wang 提问时间:5/2/2023 最后编辑:Xin_Wang 更新时间:5/2/2023 访问量:46
shared_mutex.lock 和 shared_mutex.lock_shared 之间的性能差异?
performance differences between shared_mutex.lock and shared_mutex.lock_shared?
问:
场景是:我有二换二的共享变量,为了防止死锁,如果线程A得到但不能得到,线程B得到但不能得到,在这种情况下,线程A应该放弃还是应该放弃线程B?这两种选择之间有什么性能差异吗?shared_mutex
a
b
mutex_a
mutex_b
shared_mutex_b
shared_mutex_a
mutex_a
shared_mutex_b
std::shared_mutex mutex_a, mutex_b;
int a, b;
void foo(){
mutex_a.lock();
if(mutex_b.try_lock()){
do sth();
mutex_a.unlock();
mutex_b.unlock();
}else{
mutex_a.unlock(); // choice 1
}
}
void bar(){
mutex_b.lock_shared();
if(mutex_a.try_lock_shared()){
do sth();
mutex_b.unlock_shared();
mutex_a.unlock_shared();
}else{
mutex_b.unlock_shared(); //choice 2
}
}
我知道以相同的顺序获取两个锁可以防止死锁,但这不是重点!
答: 暂无答案
评论
void foobar()
void foo()
void bar()
lock/unlock
lock_shared/unlock_shared
try_lock_shared
unlock_shared
try_lock