在静态类成员函数上使用互斥锁

时间:2010-12-10 07:37:22

标签: thread-safety pthreads mutex

我有一个调用至少一个线程的Class。 Class可以有很多线程。该线程需要调用Class的静态成员。在每次调用静态成员之前是否必须使用互斥锁,因此其他线程不能同时调用成员?我可以为类的所有不同静态成员函数使用相同的互斥变量吗?我正在使用pthreads库。

1 个答案:

答案 0 :(得分:0)

这是一个复杂的,历史悠久的多线程问题,没有直截了当的答案。这实际上取决于您的使用模式:

  • 这些静态成员是否经常访问?
  • 这些成员是否同时被多个线程访问(而不仅仅是一对)?
  • 最常使用哪些静态成员?
  • 是否一起使用多个静态成员?
  • 这些操作主要涉及阅读吗?

这些问题的答案有助于确定应用哪种解决方案。例如,如果您需要吞吐量,则单个互斥锁可以更高效。如果要最小化延迟,独立成员上的多个互斥锁(那些不需要与另一个成员一起使用的互斥锁)将有助于最小化线程之间的争用。如果阅读是主要操作,您甚至可能根本不需要互斥锁 - 请查看pthread_rwlock