当前位置:  开发笔记 > 编程语言 > 正文

C++中的共享变量11

如何解决《C++中的共享变量11》经验,为你挑选了1个好方法。

所以我上学期参加了OS课程,我们有一个并发/线程项目.这是一架机场模拟器降落飞机/让它们朝着风吹的方向起飞.我们不得不用Java来做.所以现在决赛结束了,我很无聊,我试图用C++ 11来做.在Java中,我在main中使用了一个synchronized变量(0 - 360)并将其传递给我正在使用的3个线程.我的问题是:你能用C++ 11做到吗?它是一个基本的读写器,一个线程写入/更新风,另一个2(起飞/陆地)读取.

我通过在我的"threads.cpp"实现文件中使用全局wind变量来实现它.但有没有办法将变量传递给我想要的多个线程,并且所有线程都跟上它?或者我真的更好地使用全局变量并且不传递任何东西?(为什么/为什么不呢?)我看着std::ref()但是没有用.

编辑:我已经在使用互斥锁和lock_guard.我只想弄清楚如何在所有线程中传递并保持变量最新.现在它只在写线程中更新.



1> John Zwinck..:

您可以使用std::mutexwith 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);


那么,大多数人认为全局变量在大多数情况下都是不良实践.至少使测试更加困难.
推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有