UNIX便携式primefaces操作

在C中是否有(POSIX-)可移植方式用于primefaces变量操作,类似于使用pthread的可移植线程?

primefaces操作是像“递增和获取”这样的操作,它们以primefaces方式执行,这意味着没有上下文切换可以干扰操作。 在Linux内核空间中,我们必须使用atomic_t类型,在Java中我们有java.util.concurrent.atomic包。

在Linux上,atomic.h文件提供primefaces操作,但include是平台相关的,例如#include ,它在Mac OS X上不能以类似的方式提供。

对于任何在未来偶然发现这种情况的人来说,C11primefaces是现在最好的方法 – 我相信它们将被包含在GCC 4.9中。

既然你要求OS X:

(因为在这个post中提出了跨平台性。)

OS X具有OSAtomicAdd32()和朋友的function。 它们在“/usr/include/libkern/OSAtomic.h”中声明。 请参阅“线程编程”指南的 “使用primefaces操作”部分。

对于Windows,有InterlockedIncrement()和朋友(参见MSDN)。

与gcc builtins __sync_fetch_and_add()和朋友(已在上面链接)一起,您应该为每个主桌面平台提供一些东西。

请注意,我自己还没有使用它们,但可能会在接下来的几天内使用它们。

从C11开始,有一个可选的Atomic库 ,它提供primefaces操作。 对于具有此可选function的C11编译器(如gcc-4.9)的任何平台,这都是可移植的。

可以使用__STDC_NO_ATOMICS__检查primefaces是否存在以及是否存在

atomic.c

 #include  #include  #ifndef __STDC_NO_ATOMICS__ #include  #endif int main(int argc, char**argv) { _Atomic int a; atomic_init(&a, 42); atomic_store(&a, 5); int b = atomic_load(&a); printf("b = %i\n", b); return EXIT_SUCCESS; } 

编译器调用

 clang -std=c11 atomic.c gcc -std=c11 atomic.c 

不,POSIX没有指定任何可移植的无锁/primefaces操作。 这就是为什么他们有pthreads。

您要么必须使用非标准方式,要么坚持使用ptrheads来实现可移植性。

AFAIK没有跨平台的方法来进行primefaces操作。 可能有一个图书馆,但我不知道。 不过,打自己的并不是特别难。

我不认为有。

当然,许可证允许的一种解决方法是从Linux内核空间复制相关的每个体系结构实现。 我没有密切关注这些原语的演变,但我猜它们确实是原语,即不依赖于内核中的其他服务或API。