今天大神同事遇到一个问题,如下:
如果两个线程共用一个线程锁,在A线程里面申请两次这个锁,B线程里释放一次,那么程序会正常运行吗,还是会阻塞在某个地方?
场景1:时间片竞争,各线程对锁的操作先后顺序未知
[root@zxx ~/testcode]$./pthreadlock
thread two count value is 1
unlock thread two count value is 1
thread one count value is 1
lock1 thread one count value is 2
测试结果如上所示:线程二先释放锁,线程1申请锁成功,但是由于一直没有释放,因此在第二次申请锁的地方等待
场景2:通过sleep让线程1先申请锁,线程二再释放
[root@zxx ~/testcode]$./pthreadlock
thread one count value is 1
lock1 thread one count value is 2
thread two count value is 2
unlock thread two count value is 2
lock2 thread one count value is 3
可以看到线程1先上锁了,紧接着线程2释放锁,线程1又申请锁,奇怪的是代码并没有在此等待锁的再次释放,正常执行完退出了。