我正在尝试模拟进餐哲学家的问题,但无法对其进行可视化。当线程从Waiting()到Eating()到Thinking()时,它更改了一个称为状态的变量来表示这一点。但是在我的主线程中,它从未看到状态变量的变化。当绘制以更改哲学家的颜色时,它将调用状态的返回函数。
有什么帮助吗?
这是一些代码:
状态变更
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;
}
}
最佳答案
如果不同步,则尝试从多个线程访问一个变量就是未定义行为。添加一个互斥锁。