Pthread用于许多类变量

pthread for many class variables

本文关键字:类变量 许多 用于 Pthread      更新时间:2023-10-16

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

你可以给你的setter一个"threadname",并与你想要修改的线程进行比较来改变你的值。

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

如果p[n]只使用varn(其中n ={0..99}),则不需要任何同步机制。


:

如果可能的话,将变量声明为_Atomic,否则保护访问(通常通过互斥锁)