如何做一个primefaces增量和获取在C?

我正在寻找一种方法来自动递增一个短,然后返回该值。 我需要在内核模式和用户模式下都这样做,所以在Linux下,在Intel32位体系结构下。 不幸的是,由于速度要求,互斥锁并不是一个好的select。

有没有其他方法可以做到这一点? 在这一点上,似乎唯一的select是内联一些程序集。 如果是这样的话,有人可以指点我适当的指示吗?

Solutions Collecting From Web of "如何做一个primefaces增量和获取在C?"

GCC支持原子操作:

gcc原子

__原子内置插件

从GCC 4.8开始,已经不建议使用__atomic内置__atomic ,而是使用__atomic内置__atomic : https : __atomic

他们实现了C ++内存模型, std::atomic在内部使用它们。

以下POSIX线程示例在x86-64上与++一致失败,并始终与_atomic_fetch_add配合_atomic_fetch_add

 #include <assert.h> #include <pthread.h> #include <stdlib.h> enum CONSTANTS { NUM_THREADS = 1000, NUM_ITERS = 1000 }; int global = 0; void* main_thread(void *arg) { int i; for (i = 0; i < NUM_ITERS; ++i) { __atomic_fetch_add(&global, 1, __ATOMIC_SEQ_CST); /* This fails consistently. */ /*global++*/; } return NULL; } int main() { int i; pthread_t threads[NUM_THREADS]; for (i = 0; i < NUM_THREADS; ++i) pthread_create(&threads[i], NULL, main_thread, NULL); for (i = 0; i < NUM_THREADS; ++i) pthread_join(threads[i], NULL); assert(global == NUM_THREADS * NUM_ITERS); return EXIT_SUCCESS; } 

C11 _原子

在5.1中,上面的代码适用于:

 _Atomic int global = 0; global++; 

但是我认为threads.h还没有被实现来实际创建没有POSIX的线程。