假设我有一个可能从另一个线程取消的任务。该任务在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
它似乎有效,但是我对此没有任何保证。我想知道是否有更好(正确)的方法。
在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] 删除。
我来说两句