我已经定义了一个具有std::mutex my_mutex
作为其私有成员变量的类。但是当我尝试在从不同线程调用的成员函数中使用它时lock_guard
,编译器会抛出很多错误。如果我把这个互斥锁放在课堂之外,它就可以工作。代码如下
class ThreadClass
{
std::mutex my_mutex;
public:
void addToList(int max, int interval)
{
std::lock_guard<std::mutex> guard(my_mutex);
for (int i = 0; i < max; i++)
{
// Some operation
}
}
};
int main()
{
std::thread ct(&ThreadClass::addToList,ThreadClass(),100,1);
std::thread ct2(&ThreadClass::addToList,ThreadClass(),100,10);
std::thread ct3(&ThreadClass::print,ThreadClass());
ct.join();
ct2.join();
ct3.join();
}
如果将相同my_mutex
的内容保留在课堂之外,那么它可以正常工作。那么当同一个变量在类中并在线程所作用的成员函数中调用时,它是否像静态成员一样对待?