我有一个有很多私有变量的类。每个都有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);
}
答案 0 :(得分:0)
你可以给你的setter提供“threadname”并与你想要修改的线程进行比较来改变你的价值。
pthread_setname
pthread_getname
http://man7.org/linux/man-pages/man3/pthread_setname_np.3.html
答案 1 :(得分:0)
如果p[n]
仅使用varn
(n
= {0..99}),则不需要任何同步机制。
<强>更新强>:
否则declare the variables to be _Atomic
保护访问权限(通常通过互斥锁)。