【发布时间】:2020-08-02 17:20:59
【问题描述】:
我在 Ubuntu 上用 C 语言编写代码。 我有超过 2 个这样的线程:
void * thread(void)
{
retry:
pthread_mutex_lock(&mutex);
//DO SOMETHING
pthread_mutex_unlock(&mutex);
goto retry;
}
所以我有线程 1、线程 2、...、线程 N。 有时 thread2,...,threadN 可以使用 pthread_cancel() 从 thread1 中终止。
这个 pthread_cancel() 被插入到互斥体中,所以它在安全区域中被调用。
每次thread1在threadK上调用pthread_cancel()时,threadK都在等待一个mutex,所以它调用了函数pthread_mutex_lock()。
这东西会在我的程序中造成问题吗? 我的程序有一个错误,我认为我有一个死锁,但我不明白为什么。我想这就是原因。
在此先感谢大家。
【问题讨论】:
-
您是否在线程实际上已锁定任何互斥锁时杀死线程?如果是这样,当持有锁的线程被杀死时,任何锁定的互斥体都将保持锁定状态。杀死线程通常是一个非常糟糕的设计 - 有太多可能出错的地方。
-
好的,现在我明白我为什么会出现死锁了。谢谢
-
杀死和取消不是一回事。 你实际上在做什么?
-
pthread_cancel()
标签: c multithreading pthreads mutex deadlock