我正在尝试模拟 Dining Philosophers 问题,但我无法将其可视化。当线程从 Waiting() 移动到 Eating() 再到 Thinking() 时,它会更改一个名为 state 的变量来表示这一点。但是在我的主线程中,它从未看到状态变量发生变化。绘制时调用状态返回函数改变哲学家的颜色。
有什么帮助吗?
这是一些代码: 状态变化
void Philosopher::Eat()
{
state_ = EATING;
Sleep(500);
}
返回函数
Philosopher::_state Philosopher::ReturnState()
{
return state_;
}
返回函数的调用
Philosopher::_state current_state_;
current_state_ = philosopher_[i].ReturnState();
switch (current_state_)
{
case Philosopher::PICKING:
{
glColor3f(1, 0, 0);
break;
}
case Philosopher::EATING:
{
glColor3f(0, 1, 0);
break;
}
case Philosopher::THINKING:
{
glColor3f(0, 0, 1);
break;
}
}
最佳答案
如果没有同步,尝试从多个线程访问一个变量是未定义的行为。添加互斥量。
关于c++ - C++ 中线程所做的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30211285/