我正在用 C 语言编写一个需要多线程(pthread)的程序。 该线程被创建了几次,假设有 5 次。我使用 ncurses(终端中的一种图形窗口),我在其中添加了一些按钮,我想单击该按钮来挂起线程,然后单击再次恢复它。
这些线程一起工作,并且它们与阻塞这些线程的另一个线程相关,直到满足有效条件,然后让它们继续工作(我使用条件变量和互斥体来做到这一点)。
我对如何能够挂起一个线程感到困惑。我想过做一个条件变量,但如果我这样做,那么我需要为每个线程一个条件变量。我发现了一个名为 pthread_kill
的函数,但它不起作用并停止了所有程序。
很多人都有同样的问题,有什么办法可以使用信号来做到这一点吗? 我不知道代码是否有用,因为我需要的是想法,但无论如何我都会把它放出来。
这是线程的函数,会重复5次
void* update(void* arg)
{
int statut;
threadUpdate tu;
tu = *(threadUpdate*)arg;
while(1)
{
statut = pthread_mutex_lock(&mutex);
if(statut!=0)
{
fprintf(stderr, "Erreur lock mutex\n");
}
scene_update2(tu.scene, tu.i);
/*scene_update(tu.scene);*/
*(tu.traitementTermine)=*(tu.traitementTermine)+1;
if(*(tu.traitementTermine)==*(tu.nbObjets))
{
statut = pthread_cond_signal(&cond1);
if(statut!=0)
{
fprintf(stderr, "Erreur cond signal\n");
}
}
statut = pthread_cond_wait(&cond2,&mutex);
if(statut!=0)
{
fprintf(stderr, "Erreur cond wait\n");
}
statut = pthread_mutex_unlock(&mutex);
if(statut!=0)
{
fprintf(stderr, "Erreur unlock mutex\n");
}
}
return NULL;}
将创建一次的线程只包含一些互斥体,用于与其他线程控制条件变量。这是有效的,我对此没有任何问题。
最佳答案
查看semaphores 。您应该能够为每个线程及其正在使用的变量获得一个带有信号量的信号系统。
关于c - 在c中挂起一个线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50221649/