【发布时间】:2014-01-26 05:53:31
【问题描述】:
我有一个多线程程序,主线程是第三方(无法更改)和纯 C。我的任务是围绕它构建新模块(在 C++ 中),这些模块部分驻留在其他线程中并且需要使用 C 程序的接口。基本上只是读取一些在 C 线程中存储和更新的变量(整数、浮点数,没什么复杂的)。
现在我的问题是:我如何确保在访问这些变量时不会从 C 接口中得到垃圾,因为我不能在读取时使用互斥锁来锁定它。这甚至可能吗?还是写一个浮点/整数是原子操作?
【问题讨论】:
-
混合 C/C++ 与问题关系不大。我建议将此线程称为“与外部库的数据同步”或类似的东西。
-
什么CPU和操作系统?我认为这将对什么是原子的,什么不是原子的产生影响。此外,您总是会遇到缓存问题,即其他线程已更改该值但尚未将其写入主 RAM,因此您最好不要做任何具有稍微过时的值是致命问题的事情。
-
我就是这么想的……我不想让它依赖于一些特殊的架构。
-
@fewu - 您能否详细介绍一下“主线程”的结构和问题的 C 部分,以及 C++ 程序将如何与之交互?您提到主线程将是 C,您无法更改它,但这提出了一个问题 - C++ 线程首先是如何启动的?另外(这确实应该是第一个问题)- C 代码本身记录了线程安全性是什么?诚然,答案可能是“没什么”,但至少值得一试。
-
主线程是 C(实际上是从 Matlab Simulink 生成的代码),具有我在 C++ 中实现的定义接口,因为我必须连接另一个 C++ 库(也是第 3 方)。在这个 C++ 实现中,我启动了 C++ 线程。关于您的第二个问题:正如您所怀疑的那样,线程安全与此无关。
标签: c++ c multithreading thread-synchronization