关于线程安全中Lock的一些说明

object obj=new object(); object obj2=new object();

//锁块1 lock(obj){  // do something... }

//锁块2 lock(obj){  // do something...  // do something...  // do something... }

//锁块3 lock(obj2){  // do something...  // do something...  // do something... }

这里的lock(obj){} 并不是要在代码块执行完之前 锁住obj不让访问 而是锁住代码块的内容 obj只是相当于一个锁标识  在代码块结束之前,不再允许任何线程 访问,带有obj锁标识的代码块. 也就是说在lock代码块没执行完之前,obj是可读可写的,只是... 不能有任何线程再去访问标识为obj的锁里面的代码块.任何加了obj标识的加锁代码块都不允许

上面代码中 假如锁块1代码没有结束 则锁块2的代码进不去,锁块3的代码能正常进去 (虽然是同一个类型的实例,但必须引用也相同,才会正常加锁,如果实例引用不一致 也不会加锁)

posted @ 2013-05-04 16:30  Xdoudou  阅读(203)  评论(0编辑  收藏  举报