我在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;}
将创建一次的线程只包含一些互斥锁来控制其他线程的条件变量。这是有效的,我没有问题。