暂停c

时间:2018-05-07 20:04:29

标签: c multithreading pthreads ncurses

我在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;}

将创建一次的线程只包含一些互斥锁来控制其他线程的条件变量。这是有效的,我没有问题。

1 个答案:

答案 0 :(得分:0)

结帐semaphores。您应该能够为每个线程及其正在使用的变量建立一个信号量系统,其中包含信号量。