情况:我有两种方法: method1加载config的值; method2返回加载configuration的值。 这两种方法可能被不同的线程调用。
问题:我想使用一个互斥锁来locking/解锁两个方法。 所以当method1被locking时 ,当method2被调用时,它也应该被locking 。 当我读到互斥体时,我感到困惑,当他们说我locking代码的区域,直到解锁被调用。
问题:当我locking方法1时,我是否也locking方法2?
期望:我想要发生的是当方法1正在更新将由方法2返回的configuration数据时调用方法2。
Windows 2012上的CreateMutex错误代码为ERROR_ACCESS_DENIED
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] 举报,一经查实,本站将立刻删除。