在受限设备上,我经常发现自己在 2 个线程之间用 2 个布尔值“伪造”锁。每个线程只能由一个线程读取,并且只能由另一个线程写入。这就是我的意思:
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;
}
当然,在 PC 上我不会这样做,但在受限设备上,读取bool
值似乎比获取锁要快得多。当然,sleep(50)
当需要更改缓冲区时,我会以较慢的恢复速度(参见“”)进行权衡。
问题——它是完全线程安全的吗?或者在伪造这样的锁时我需要注意哪些隐藏的陷阱?还是我根本不应该这样做?