pthread用于许多类变量

时间:2014-08-11 13:45:57

标签: c++ pthreads

我有一个有很多私有变量的类。每个都有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);
}

2 个答案:

答案 0 :(得分:0)

你可以给你的setter提供“threadname”并与你想要修改的线程进行比较来改变你的价值。

pthread_setname
pthread_getname

http://man7.org/linux/man-pages/man3/pthread_setname_np.3.html

答案 1 :(得分:0)

如果p[n]仅使用varnn = {0..99}),则不需要任何同步机制。


<强>更新

否则declare the variables to be _Atomic保护访问权限(通常通过互斥锁)。