【发布时间】:2014-10-16 02:53:56
【问题描述】:
情况:我有两种方法:method1加载配置值; method2 返回加载配置的值。 这两种方法都可能被不同的线程调用。
问题:我想使用一个互斥锁来锁定/解锁两种方法。所以method1被锁定时,method2被调用时也应该被锁定。当我读到互斥锁时,我很困惑,当他们说我锁定代码区域直到调用解锁时。
问题:当我锁定方法1时,我是否也锁定了方法2?
期望:我希望在method1更新将由method2返回的配置数据时调用method2。
示例代码:
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;
};
【问题讨论】:
-
您不打算使用任何一种方法调用 other,对吧?如果没有,单个互斥锁似乎就足够了,在进入任一方法时都会被锁定。
-
加载器是否设计为将输入文件作为参数?如果不是,似乎围绕 getter 的惰性初始化器可能是更好的选择,如果您只需要通过方法 2 获取,这将降低复杂性。
-
我想要发生的是在method1更新将由method2返回的配置数据时调用method2。
-
“他们说我会锁定代码区域,直到调用 unlock”——将互斥锁想象成一根说话棒。你在说话前拿起棍子,说完就递给它。你说话的时间就像代码区域。
-
请注意:method2() 将使互斥锁处于锁定状态,因为它在解锁之前返回,因此永远不会调用 pthread_mutex_unlock(mutex1)。
标签: c++ linux multithreading mutex