2012-07-12 225 views

回答

0

如果您有多个线程,几乎所有函数都可能参与潜在的活锁或死锁(或两者兼有),具体取决于它的使用方式。算法很重要。现在,有一些特定的使用模式可能会或可能不会形成活动或死锁,但是从功能名称来看,很难用任何特定的方式来回答。

+0

该函数本身不能死锁,因为它不会等待任何东西,但当然在循环中调用它可能会死锁。 – 2012-07-12 03:11:03

+0

@R,你甚至不需要循环 - 只要与另一个非trywait锁进行交互即可。我的观点是,你不能仅仅因为它使用sem_trywait而声明一个没有死/活锁的程序。 – bdonlan 2012-07-12 03:22:07

+0

由于每条指令都会推进进度,所以不会循环(或递归)的程序不会死锁... :-) – 2012-07-12 03:50:52

0

如果两个线程正在争夺由对方的信号锁定的相同资源,它应该会失败并返回E_DEADLK。这是正确的行为,但您需要检测它并在发生时重试。换句话说,是的,它可能会死锁,但是系统会检测到这个并且失效,而不是让你挂起。

相关问题