到目前为止,接触过两种可重入对象,可重入函数,与可重入锁。
虽然都是可重入,但概念上应该有所区分。
可重入锁,指的此lock可以多次重复获取,例如reentrantLock对象,同一个线程在持有该锁后,可重复获取该锁,而不需要再竞争,也不会造成自我死锁,只是锁的
持有计数增加,并且持有者释放锁的次数要与获取锁匹配,否则该锁将一直被持有,造成资源不释放。
可重入函数,指的是次函数可支持中断,而保证执行结果正确。这个可重入是对线程调度而言的,函数执行被中断后,调度器执行其他的任务,然后在某个时刻重新
调度执行先前任务的线程,此时函数被重新进入,继续执行。
如果一个函数只使用local variables,即它的调用栈与其它函数分离,则此函数是可重入的;如果一个函数引用了公共变量(global/static variables),
则需要配合同步措施来保证数据的正确性。
与之对应还有一个线程安全的概念,线程安全简单讲就是在多线程场景下可用,可以是函数可用,队列可用,所谓可用也就是在多线程场景下,不会产生无法预测,不
确定的结果。