Tengo 2 hilos y un float
global compartido. Un hilo solo escribe en la variable mientras que el otro solo lo lee, ¿necesito bloquear el acceso a esta variable? En otras palabras:¿Necesito un bloqueo cuando solo un hilo escribe en una variable compartida?
volatile float x;
void reader_thread() {
while (1) {
// Grab mutex here?
float local_x = x;
// Release mutex?
do_stuff_with_value(local_x);
}
}
void writer_thread() {
while (1) {
float local_x = get_new_value_from_somewhere();
// Grab mutex here?
x = local_x;
// Release mutex?
}
}
Mi principal preocupación es que una carga o una tienda de float
no ser atómica, de manera que local_x
en reader_thread
termina teniendo un valor falso, parcialmente actualizada.
- ¿Es esto una preocupación válida?
- ¿Hay alguna otra forma de garantizar la atomicidad sin un mutex?
- ¿Usaría
sig_atomic_t
como variable compartida, suponiendo que tiene suficientes bits para mis propósitos?
El lenguaje en cuestión es C usando pthreads.
¿por qué quieres evitar el uso de un mutex? –
El hilo del lector se ejecutará en cada cuadro de un juego como un complemento. Si bien es probable que sea una optimización prematura, quería evitar cualquier sobrecarga que pudiera. Dicho esto, estoy convencido por las respuestas de que debería usar un mutex, y dudo que esa cantidad de sobrecarga sea un problema. –
Gracias por todas las respuestas. Parece que no debería contar con que la lectura/escritura sea atómica, especialmente para la portabilidad, por lo que el bloqueo parece ser el camino a seguir. –