所以上学期我上了OS课,我们有一个并发/线程项目。这是一个机场模拟飞行,使飞机着陆/让飞机起飞到风吹的方向。我们必须用Java来做。所以现在决赛结束了,我很无聊,我试图在C++ 11中做到这一点。在Java中,我对main中的风使用了一个同步变量(0-360),并将其传递给我正在使用的3个线程。我的问题是:您可以在C++ 11中做到吗?它是一个基本的读取器/写入器,一个线程写入/更新风,另一个线程(起飞/降落)读取。
通过在我的“threads.cpp”实现文件中具有全局wind变量,使它起作用。但是,有没有一种方法可以将变量传递给我想要的尽可能多的线程,并且所有人都跟上它的步伐?还是只使用全局变量而不传递任何东西对我来说实际上更好?(为什么/为什么不呢?)我在看std::ref()
,但是没有用。
编辑:我已经在使用互斥锁和lock_guard。我只是想弄清楚如何在所有线程中传递并保持变量为最新。现在,它仅在写线程中更新。
最佳答案
您可以使用std::mutex
和std::lock_guard
来同步对共享数据的访问。或者,如果共享数据适合整数,则可以使用std::atomic<int>
而不进行锁定。
如果要避免使用全局变量,只需在启动它们时将共享状态的地址传递给线程函数。例如:
void thread_entry1(std::atomic<int>* val) {}
void thread_entry2(std::atomic<int>* val) {}
std::atomic<int> shared_value;
std::thread t1(thread_entry1, &shared_value);
std::thread t2(thread_entry2, &shared_value);