而如果不恰当的使用了锁,且出现同时要锁多个对象时,会出现死锁情况,如下:
看打印:
A锁住了B需要的,B锁住了A需要的,此时死锁产生。
信号量可以控制资源能被多少线程访问,这里我们指定只能被一个线程访问,就做到了类似锁住。而信号量可以指定去获取的超时时间,我们可以根据这个超时时间,去做一个额外处理。
对于无法成功获取的情况,一般就是重复尝试,或指定尝试的次数,也可以马上退出。
看打印情况:
第一次两个线程获取信号量时都会失败,因为失败后B等待时间长,所以A再次尝试时会成功。
实际中,你执行任务内容不同,所需时间是不同的。
另外不同的线程,对于获取信号量失败的处理也可能是不同的。
所以,虽然不会产生死锁,但是你要根据实际情况,来编写获取失败后的处理机制。