На ограниченных устройствах я часто нахожу себя "поддельными" замками между двумя потоками с двумя bools. Каждый из них читается только одним потоком и только написан другим. Вот что я имею в виду:
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;
}
Конечно, на ПК я бы этого не делал, но на ограниченных устройствах, кажется, чтение значения bool было бы намного быстрее, чем получение блокировки. Конечно, я отменяюсь для более медленного восстановления (см. "sleep(50)" ), когда требуется изменение буфера.
Вопрос - полностью ли он потокобезопасен? Или есть скрытые gotchas, о которых мне нужно знать, когда притворяются такими замками? Или я не должен этого делать вообще?
