当多个线程同时运行时,为什么需要同步以避免出现问题"访问共享资源时?
我是多线程编程和同步概念的新手。有人可以解释一下吗?
答案 0 :(得分:1)
假设这个方法:
private int value = 0;
public void computeStuff()
{
int tmp = value;
tmp++;
value = tmp;
}
假设有1000个线程调用它。如果没有同步,几个线程可以并行执行计算,并且不确定其结果是否会写入value
。一个线程的执行可能在tmp
的分配和value
的最终分配之间中断。最终结果是value
可能不等于1000,但可能会有更低的值。
通过向方法添加synchronize
,所有线程将逐个调用它。是的,这比没有synchronize
要慢,因为一些线程将被迫等待挂起锁。但好消息是我们保证结果将是1000
。
(请注意,我知道这是一个愚蠢的例子 - 我喜欢愚蠢的例子)