Tag: STDATOMIC
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
¿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
Aprendí que TSAN no comprende std::atomic_thread_fence, y para solucionarlo, debes decirle a TSAN qué variables atómicas se ven afectadas por la barrera, colocando __tsan_acquire(void *) y __tsan_release(void *) junto a ella (para las barreras de adquisición y liberación respectivamente). Pero, ¿qué pasa con las barreras de orden de secuencia consistente? . . . Read more
Entonces, en mi código hay el fragmento: std::atomic<uint>* atomic_buffer = reinterpret_cast<><uint>*>(data); const size_t num_atomic_elements = svm_data_size / sizeof(std::atomic<uint>); for (i = 0; i < num_atomic_elements; i++) { std::atomic_init(&atomic_buffer[i], std::atomic<uint>(0)); } Sin embargo, al ejecutarlo, se devuelve el siguiente error: error: no se encuentra una función coincidente para ‘atomic_init’ … nota: . . . Read more
Tengo un tipo atómico en el que necesito compararlo atómicamente con un valor, y si los dos valores no son iguales, intercambiar el valor del atómico. En otras palabras, donde compare_exchange_strong básicamente realiza esta operación atómicamente: if (atomic_value == expected) atomic_value = desired; …Estoy buscando una forma de hacer esto: . . . Read more