Tag: ATOMIC
Entiendo que atomic_thread_fence en C++ es bastante diferente a las acciones de almacenamiento/carga atómicos, y no es una buena práctica tratar de interpretarlas en términos de las instrucciones mfence/lfence/sfence de la CPU (tal vez x86). Si uso c.load(memory_order_acquire), ninguna acción de almacenamiento/carga después de c.load podrá ser reordenada antes de . . . Read more
Tengo un código que copia bits enmascarados en un entero, primero limpiándolos en el entero de destino y luego combinándolos mediante la operación OR. Así: bitsToSet = 6 targetInt &= ~(1 << bitsToSet) targetInt |= desiredBitValue << bitsToSet El problema es que ahora necesita ser seguro para hilos, y necesito . . . Read more
Obtuve este ejemplo de spinlock de Anthony Williams, y hay algo mal en él (o yo tuve un largo día). #include <atomic> class spinlock { std::atomic_flag flag; public: spinlock() : flag(ATOMIC_FLAG_INIT) {} void lock() { while (flag.test_and_set(std::memory_order_acquire)); } void unlock(){ flag.clear(std::memory_order_release); } }; spinlock sl; void f() { std::lock_guard lc(sl); . . . Read more
Tengo el siguiente contador implementado en Go que me gustaría usar concurrentemente. Estoy utilizando el paquete atomic para almacenar el estado, pero no estoy seguro si podría haber condiciones de carrera. ¿Necesito agregar un mutex adicional también para protegerme de incrementar por debajo de cero, por ejemplo, o las operaciones . . . Read more
¿Puedo realizar operaciones aritméticas en una variable atómica directamente? Dado que la biblioteca estándar de C proporciona muchas funciones de utilidad como atomic_fetch_add para realizar la adición entre una variable atómica y una variable no atómica, me pregunto si, ya que la variable es atómica, puedo realizar operaciones aritméticas directamente . . . Read more