我定义了一个类,其中私有成员变量是 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
不在类中,则它可以正常工作。那么当相同的变量在类内部并在成员函数中被线程操作时,它是否像静态成员一样处理?