+ -
当前位置:首页 → 问答吧 → 求助,这几天在看多线程,关于锁,好晕

求助,这几天在看多线程,关于锁,好晕

时间:2011-12-14

来源:互联网

线程同步中对象的锁到底是个什么东东,它到底锁住了什么?锁住后有什么效果?

作者: hxy545380243   发布时间: 2011-12-14

好比如火车上的卫生间,一次只能进一个人,谁进去后(拿到了锁),那么其他人是无法进去的

作者: monghuan   发布时间: 2011-12-14

锁住(限制)了其它线程对同步区的访问
如果把线程比作人,同步区比作房间,锁比作房门的话,同步就好比上锁,房间一次只允许一个人访问

作者: dracularking   发布时间: 2011-12-14

锁就是把一个东西设置成同一个时间只能有一个线程访问,不管你有多少个线程,被锁的对象只能被其中一个线程调用,其他线程想用,只能排队等候,等待被锁的对象被释放,然后他们再去抢!

作者: xs3627575   发布时间: 2011-12-14

锁的时间范围是多少啊?是从开始执行同步块,同步方法时,线程获得对象的锁然后再同步块同步方法执行完后,不管线程是否结束,是不是线程都会释放掉这个对象的锁啊?

作者: hxy545380243   发布时间: 2011-12-14

我们写的程序,其实,可以分成两个部分,一个是你要操作的数据,另一个是用哪些指令来操作。
其实,这里用“指令”不太确切。
如果,楼主是用过C语言,可以理解为:结构体和函数,两个部分。

线程,楼主可以理解成指令的 执行器 ,每个线程,都会相对独立的执行你编写的“指令”。

当多个执行器执行指令来处理同一个数据时,会产生数据不一致的现象。(这里就不详细解释了)

“锁”机制主要是为了解决数据不一致的问题的。
当指令访问同一个数据时,先请求该数据的“锁”,对数据加锁。
其他线程在操纵该数据时,由于请求“锁”时,数据已经加锁,
就要等待锁被释放,才能获得数据加锁的可能,获得加锁后,再进行数据操作,操作完成,释放锁。

作者: preferme   发布时间: 2011-12-14

还是一直到线程结束才会把所获得的锁释放掉?

作者: hxy545380243   发布时间: 2011-12-14

来人啊。。。。。。

作者: hxy545380243   发布时间: 2011-12-14

引用 5 楼 preferme 的回复:

我们写的程序,其实,可以分成两个部分,一个是你要操作的数据,另一个是用哪些指令来操作。
其实,这里用“指令”不太确切。
如果,楼主是用过C语言,可以理解为:结构体和函数,两个部分。

线程,楼主可以理解成指令的 执行器 ,每个线程,都会相对独立的执行你编写的“指令”。

当多个执行器执行指令来处理同一个数据时,会产生数据不一致的现象。(这里就不详细解释了)

“锁”机制主要是为了……

讲得很好

作者: Chianfirstli   发布时间: 2011-12-14

楼上诸位说的很好

作者: weixiaojulebu   发布时间: 2011-12-14

不错,

作者: weixiaojulebu   发布时间: 2011-12-14

热门下载

更多