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