我一直听说使用不可变数据结构和不可变对象是线程安全和防止竞争条件而不需要使用信号量的良好模式,但我仍然想不出使用它们的方法。即使是最简单的场景。例如
int a = 0;
Semaphore s = new Semaphore();
void thread1() {
s.wait();
if (a == 2) {
// do something
}
a = 1;
s.signal();
}
void thread2() {
s.wait();
if (a == 1) {
// do something
}
a = 2;
s.signal();
}
如何更改此代码以使用a
的不可变对象?