C和C ++原子之间的互操作性

grepcake

假设我有一个可能从另一个线程取消的任务。该任务在C函数中执行,另一个线程运行C ++代码。我怎么做?

粗略的例子。

C:

void do_task(atomic_bool const *cancelled);

C ++:

std::atomic_bool cancelled;
…
do_task(&cancelled);

现在,我创建了一个atomics.h包含以下内容的文件

#ifdef __cplusplus
#include <atomic>
using std::atomic_bool;
#else
#include <stdatomic.h>
#endif

它似乎有效,但是我对此没有任何保证。我想知道是否有更好(正确)的方法。

1201程序警报

atomic_bool用C型和std::atomic<bool>在C ++型(如通过typedef std::atomic_bool)是两种不同类型的不相关。将A传递std::atomic_bool给期望C的C函数atomic_bool是未定义行为。它的工作原理是运气与这些类型的简单定义兼容的结合。

如果C ++代码需要调用需要C的C函数atomic_bool,则必须使用它。但是,<stdatomic.h>标头在C ++中不存在您必须为C ++代码提供一种方法,以调用C代码以隐藏类型的方式获取所需的原子变量的指针。(可能会声明一个包含原子布尔的结构,C ++只知道该类型存在,并且只知道指向它的指针。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章