Articles of atómico

¿Es fwrite atómico?

Una simple pregunta: Necesito agregar algo de registro a mi progtwig. Si dos procesos usan “fwrite” en el mismo archivo pero no el mismo descriptor de archivos, los mensajes de registro escritos serán atómicos o mixtos. ¿Hay un límite de longitud? ¿Está definido el comportamiento o implementación ANSI-C definido? Si más tarde, ¿qué hay en […]

Implementación de operaciones atómicas de lectura y escritura en el kernel de Linux

Recientemente, he echado un vistazo a la implementación del kernel de Linux de una lectura y escritura atómica y surgieron algunas preguntas. Primero el código relevante de la architecture 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) […]

¿Por qué GCC rellena este campo de bits?

El progtwig está en C usando std = c99, esto es en una máquina de 64 bits. struct epochs { volatile unsigned int epoch : 1; volatile unsigned int pulse : 1; volatile unsigned int active0 : 7; volatile unsigned int active1 : 7; volatile unsigned int counter0 : 24; volatile unsigned int counter1 : […]

¿Un comstackdor disponible proporciona una implementación de la palabra clave ‘_Atomic’ de C11 y su encabezado relacionado ‘stdatomic.h’?

Sé que el estándar C11 tiene solo un mes, pero los borradores de _Atomic son mucho más antiguos. También sé que el comstackdor GCC hace un gran esfuerzo para implementar dichas características antes de que el estándar sea aprobado oficialmente. pero incluso allí el soporte aún no está listo para el horario estelar. Sin embargo, […]

Implementando la sección crítica.

¿De qué manera es mejor y más rápido crear una sección crítica? Con un semáforo binario, entre sem_wait y sem_post. O con operaciones atómicas: #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; }

¿Deben funcionar 64bit Compare & Swap (CAS) en una máquina de 32 bits? (o máquina de 64 bits?)

Así que leí que en una máquina de 32 bits, se puede usar la operación CAS con bloques alineados de 64 bits. De manera similar, en una máquina de 64 bits, se puede usar la operación CAS con bloques de 128 bits alineados. Estoy usando una máquina de 32 bits, así que probé lo siguiente: […]

Operaciones atómicas en C en Linux

Estoy tratando de portar algún código que escribí desde Mac OS X a Linux y estoy luchando para encontrar un reemplazo adecuado para OSX solo OSAtomic.h . Encontré la familia gcc __sync* , pero no estoy seguro de que sea compatible con el comstackdor / kernel más antiguo que tengo. Necesito el código para ejecutarse […]

Portar InterlockedExchange, utilizando solo intrínsecos GCC

La API de Windows ofrece InterlockedExchange , que establece un valor en memoria atómicamente. Usando solo intrínsecos de GCC, me gustaría crear un equivalente de esa función. ¿Sería suficiente establecer el valor y luego llamar a una barrera de memoria (consulte el código a continuación)? template T InterlockedExchange(volatile T& _data, T _value) { const T […]

¿Cómo utilizar variables atómicas en C?

Necesito usar una variable atómica en C ya que se accede a esta variable a través de diferentes hilos. No quiero una condición de carrera. Mi código se está ejecutando en CentOS. ¿Cuáles son mis opciones?

en GCC 4.8?

Me gustaría hacer uso de las nuevas operaciones atómicas proporcionadas por el estándar C11. Sin embargo, tratar de #include el archivo de encabezado apropiado me da esto: csort-par.c:5:23: fatal error: stdatomic.h: No such file or directory #include La documentación en http://gcc.gnu.org/wiki/C11Status parece decir que el archivo de encabezado se proporcionó desde GCC 4.7 … ¿me […]