【发布时间】:2015-07-24 12:46:01
【问题描述】:
我正在尝试模拟餐饮哲学家的问题,但无法将其可视化。当线程从 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;
}
}
【问题讨论】:
-
可能是因为您观察的变量与您正在修改的变量不同。
-
SSCCE 请。
-
我不确定您使用的是什么多线程标准(C++11?POSIX pthreads?),但它们中的大多数禁止在一个线程中访问一个对象,而它正在或可能是,在另一个线程中修改。据推测,您使用的标准提供了同步访问共享状态的工具——互斥锁、原子,等等——使用它们。
标签: c++ multithreading dining-philosopher