多线程访问之所以出现不安全,不确定的根本原因是因为访问时序被打乱,导致一些操作的依赖条件变化。
例如:
var dict=new dictionary();
……
thread0
if(dict.containskey("key0"))
{
……
}
thread1
dict.remove("key0");
这样就有可能导致逻辑混乱,呈现混乱状态。多次执行的结果可能都不相同。
要做到线程安全,就是指不管以何种操作序列都不会出现混乱状态。也即不能因为多线程的访问导致某些对象处理不可用的状态(通常称为不稳定状态)。