多线程编程指南

与调用相关的死锁

由于不能保证获取锁定的顺序,因此如果特定线程永远不能获取锁定就会出现问题。

持有锁的线程释放锁,一小段时间后重新获取锁定时,通常会出现此问题。由于锁被释放,因此其他线程似乎理应可以获取锁。但是,持有锁的线程未被阻塞。因此,从线程释放锁到重新获取锁定的时间内,该线程将持续运行。这样,就不会运行其他线程。

通常,通过在进行重新获取锁定的调用前调用 thr_yield(3C),可以解决此类型的问题。thr_yield() 允许其他线程运行并获取锁定。

由于应用程序的时间片要求是可变的,因此系统不会强加任何要求。可通过调用 thr_yield() 来使线程根据需要进行分时操作。