我正在尝试模拟进餐哲学家的问题,但无法对其进行可视化。当线程从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;
        }
    }

最佳答案

如果不同步,则尝试从多个线程访问一个变量就是未定义行为。添加一个互斥锁。

09-05 00:11