【发布时间】:2014-08-11 13:45:57
【问题描述】:
我有一个有很多私有变量的类。每个都有 getter 和 setter 方法。我有许多线程可以访问 setter 方法并更改变量的值。无需在每个 setter 方法中编写 mutex_lock 和 mutex_unlock,我如何确保只有一个线程正在为给定变量设置值。 (问题太幼稚请见谅)
class MyClass {
private:
int var0,var1...upto var99
public:
int getVar0() { return var0 }
void setVar0(int x) { var0 = x }
.
.
.
}
MyClass mClass;
void *foo0() {
processMyClassObj0(); //does some process and sets some of 'var' variables of mClass
}
void *foo1() {
processMyClassObj1(); //does some process and sets some of 'var' variables of mClass
}
.
.
.
int main() {
pthread_t p[100];
pthread_create(&p[0],NULL,foo0,NULL);
pthread_create(&p[1],NULL,foo1,NULL);
pthread_create(&p[2],NULL,foo2,NULL);
.
.
.
pthread_create(&p[99],NULL,foo99,NULL);
pthread_exit(NULL);
}
【问题讨论】:
-
你没有告诉我们你在哪里以及多久实例化你提到的类。
-
为什么不能使用互斥锁?你也可以使用信号量吗?
-
@alk : 为线程访问的类创建一个全局对象。
-
@alk ,用示例代码更新了问题
-
“不必在每个 setter 方法中编写 mutex_lock 和 mutex_unlock,我如何确保只有一个线程正在为给定变量设置值...”通过任一 a) 确保你只有一个线程,或者 b) 确保没有两个线程包含尝试写入同一个变量的代码,或者 c) 使用互斥锁以外的东西(例如信号量、读取器/写入器锁等)来防止竞争.无论如何,互斥锁有什么问题?