Primitivas de sincronización primitiva: ¿seguro?

En dispositivos restringidos, a menudo me encuentro bloqueos "falsos" entre 2 hilos con 2 bools. Cada uno solo es leído por un hilo, y solo escrito por el otro. Esto es lo que quiero decir:

bool quitted = false, paused = false;
bool should_quit = false, should_pause = false;

void downloader_thread() {
    quitted = false;
    while(!should_quit) {
        fill_buffer(bfr);
        if(should_pause) {
            is_paused = true;
            while(should_pause) sleep(50);
            is_paused = false;
        }
    }
    quitted = true;
}

void ui_thread() {
    // new Thread(downloader_thread).start();
    // ...
    should_pause = true;
    while(!is_paused) sleep(50);
        // resize buffer or something else non-thread-safe
    should_pause = false;
}

Por supuesto, en una PC no haría esto, pero en dispositivos restringidos, parece leer unbooll valor @ sería mucho más rápido que obtener un bloqueo. Por supuesto, cambio por una recuperación más lenta (ver "sleep(50) ") cuando se necesita un cambio en el búfer.

La pregunta: ¿es completamente seguro para subprocesos? ¿O hay problemas ocultos que debo tener en cuenta al fingir cerraduras como esta? ¿O no debería hacer esto en absoluto?

Respuestas a la pregunta(5)

Su respuesta a la pregunta