微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我可以在不同的方法中使用相同的互斥体吗?

情况:我有两种方法method1加载config的值; method2返回加载configuration的值。 这两种方法可能被不同的线程调用

问题:我想使用一个互斥锁来locking/解锁两个方法。 所以当method1被locking时 ,当method2被调用时,它也应该被locking 。 当我读到互斥体时,我感到困惑,当他们说我locking代码的区域,直到解锁被调用

问题:当我locking方法1时,我是否也locking方法2?

期望:我想要发生的是当方法1正在更新将由方法2返回的configuration数据时调用方法2。

Windows 2012上的CreateMutex错误代码为ERROR_ACCESS_DENIED

为什么Nginx认使用“accept_mutex”?

pthread互斥量的开销?

睡觉时,按住boost :: interprocess :: scoped_lock导致它永远不会被释放

指针variables是否需要互斥锁?

示例代码

void Class::method1() { pthread_mutex_lock(mutex1); string1 = "a value"; pthread_mutex_unlock(mutex1); }; void Class::method2(string& aString) { pthread_mutex_lock(mutex1); aString = string1; pthread_mutex_unlock(mutex1); return; };

Boost :: mutex比没有mutex的程序花费的时间less

与进程使用互斥/信号量

如何在一个线程上花费比互斥体更长的时间?

std :: mutex :: lock在Windows上失败,错误代码为3

WaitForSingleObject – 做线程等待队列?

这正是应该如何使用互斥锁 – 以保护数据在一个线程中被访问,而另一个线程正在或可能正在修改它。 只需修复方法2中的错误(最好通过使用RAII获取互斥锁,并在复制返回值后让互斥锁的析构函数解锁互斥锁)。

是的,你可以(也应该)使用相同的互斥锁。 虽然用RAII来获取它更可取(如果你的互斥量是std::mutex或者在实现lock()和unlock() pthread_mutex_t包装了,你可以使用std :: lock_guard :

void Class::method1() { std::lock_guard<std::mutex> lock(mutex1); ... }

这样不仅可以在代码中的任何位置放置return语句,还可以实现异常安全(如果方法抛出异常,则会释放互斥锁)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐