Tag: primefaces

压缩结构中的变量可以primefaces读取吗?

我正在为Cortex M0(ARM)CPU编写代码,32位读/写是primefaces的。 现在我想知道我何时读/写8位/ 16位变量,它们是否也保证是primefaces的? 我的直觉是肯定的,因为它们在内部与32位部分对齐,所以CPU不可能需要两个单独的指令来读/写它们。 但是我也碰巧在打包结构中存储了很多变量来节省内存,并且可能变量没有在32位边界上对齐,所以16位值的每一半都可能在不同的部分。 因此,当我使用压缩结构时,我失去primefaces操作是真的吗?

InterlockedIncrement vs InterlockedIncrementAcquire / Release(Redux)

这是这个问题的后续问题 : 我想我不理解Interlocked Acquire / Release API。 我把下面的小程序放在一起。 据我了解,g_val_1,g_val_2和g_val_3应始终以相同的顺序更新,并且最终应该以相同的值结束。 但他们没有(对于多个线程)。 我错过了什么? 谢谢。 #include “windows.h” #include “stdio.h” #define _THREADS_ 100 #define _TICKS_ 1000 int volatile g_threads = 0; DWORD volatile g_val_1 = 0; DWORD volatile g_val_2 = 0; DWORD volatile g_val_3 = 0; BOOL g_running = TRUE; DWORD TestThread(PVOID ignore) { while (g_running) { InterlockedIncrementAcquire(&g_val_1); g_val_2++; […]

实施关键部分

创建关键部分的方式更好,更快? 使用二进制信号量,在sem_wait和sem_post之间。 或者使用primefaces操作: #include void critical_code(){ static volatile bool lock = false; //Enter critical section while ( !__sync_bool_compare_and_swap (&lock, false, true ) ){ sched_yield(); } //… //Leave critical section lock = false; }

C中的“++”操作是primefaces的吗?

我试图确定是否有如下声明: ++value; //assuming “value” is a **global** variable 是primefaces操作。 我需要知道这个计算是否能够被写入同一个全局变量的中断服务程序中断。

C中的primefaces读数

根据Are C ++读取和写入int Atomic? ,由于处理器缓存的问题,int的读取(以及因此指针 – 或者我认为)在C中不是primefaces的。所以,我的问题是是否有一些我可以用来制作读取primefaces的汇编,或者我需要使用锁吗? 我查看了几组primefaces操作库,到目前为止,我无法找到primefaces读取的函数。 编辑:编译器: Clang 2.9 编辑:平台: x86(64位) 谢谢。

在Linux内核中读写primefaces操作实现

最近我看到了primefaces读写的Linux内核实现,并提出了一些问题。 首先是ia64架构的相关代码: typedef struct { int counter; } atomic_t; #define atomic_read(v) (*(volatile int *)&(v)->counter) #define atomic64_read(v) (*(volatile long *)&(v)->counter) #define atomic_set(v,i) (((v)->counter) = (i)) #define atomic64_set(v,i) (((v)->counter) = (i)) 对于读取和写入操作,似乎采用直接方法来读取或写入变量。 除非在某处有另一个技巧,否则我不明白这个操作在汇编域中是否具有primefaces性的保证。 我想一个明显的答案是,这样的操作转换为一个程序集操作码,但即便如此,在考虑不同的内存缓存级别(或其他优化)时,如何保证? 在读取宏上,volatile类型用于转换技巧。 任何人都知道这会如何影响这里的primefaces性? (注意,它不用于写操作)

使用volatile作为primefaces

如果我有这样的东西…… volatile long something_global = 0; long some_public_func() { return something_global++; } 当使用多个线程访问时,期望此代码不会中断(竞争条件)是否合理? 如果它不是标准的,它仍然可以作为现代编译器的合理假设吗? 注意:所有我使用它的原因是primefaces增量和减量 – 没什么比这更好的了。

gcc的primefaces操作和代码生成

我正在考虑通过gcc查看为primefaces操作生成的一些程序集。 我尝试了以下短序列: int x1; int x2; int foo; void test() { __atomic_store_n( &x1, 1, __ATOMIC_SEQ_CST ); if( __atomic_load_n( &x2 ,__ATOMIC_SEQ_CST )) return; foo = 4; } 看看Herb Sutter关于代码生成的primefaces武器谈话,他提到X86手册要求将xchg用于primefaces存储,并使用简单的mov来进行primefaces读取。 所以我期待的是: test(): .LFB0: .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 movq %rsp, %rbp .cfi_def_cfa_register 6 movl $1, %eax xchg %eax, x1(%rip) movl x2(%rip), %eax testl %eax, […]

GCC 4.8中的?

我想利用C11标准提供的新primefaces操作。 但是,尝试#include适当的头文件给了我这个: csort-par.c:5:23: fatal error: stdatomic.h: No such file or directory #include http://gcc.gnu.org/wiki/C11Status上的文档似乎说自从GCC 4.7以来提供了头文件…我错过了什么? __STDC_NO_ATOMICS__未定义。 gcc –version如下: gcc (Ubuntu/Linaro 4.8.1-10ubuntu9) 4.8.1 Copyright (C) 2013 Free Software Foundation, Inc. 我确认__STDC_NO_ATOMICS__没有定义如下: #ifdef __STDC_NO_ATOMICS__ #error yes #else #error no #endif 收益率: csort-par.c:10:2: error: #error no #error no 编辑:感谢您的快速回复。 如果有人在谷歌遇到同样的问题而绊倒了这个问题,那么这是暂时的解决方案,直到他们发布GCC 4.9: UNIX便携式primefaces操作

使用cmpxchg8b获得无符号长度的预期输出

我正在尝试编写一个简单的比较和交换内联汇编代码。 这是我的代码 #include #include #include static inline unsigned long cas(volatile unsigned long* ptr, unsigned long old, unsigned long _new) { unsigned long prev=0; asm volatile(“lock cmpxchg8b %0;” : “=m”(prev) : “m”(*ptr),”a”(old),”c”(_new) ); return prev; } int main() { unsigned long *a; unsigned long b=5,c; a=&b; c=cas(a,b,6); printf(“%lu\n”,c); return 0; } 理想情况下,此代码应打印5但是打印0.我的代码有什么问题?请帮助。