c++ - C++ 中线程所做的更改

标签 c++ multithreading dining-philosopher

我正在尝试模拟 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/

相关文章:

c++ - glDrawArrays 访问冲突

c++ - c宏扩展错误

c - C 中的哲学家就餐使用 fork()

java - 解决哲学家就餐问题的另一种方法(需要一个正确方向的点)

c++ - 继承自 std::exception,std::exception 定义中的歧义

c++ - 使用 NetBeans [C++] 制作安装程序

java - Hashmap 的 containsKey 方法是线程安全的,如果映射被初始化一次,并且永远不会被再次修改

java - 使用 ExecutorService/ThreadPool 获取始终 Activity 线程的简单变量列表

linux:多线程,一个线程的 block 终端

java - 用餐哲学家的解决方案陷入僵局