c - 在c中挂起一个线程

标签 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;}

将创建一次的线程只包含一些互斥体,用于与其他线程控制条件变量。这是有效的,我对此没有任何问题。

最佳答案

查看semaphores 。您应该能够为每个线程及其正在使用的变量获得一个带有信号量的信号系统。

关于c - 在c中挂起一个线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50221649/

相关文章:

c - 在 C 的 GCC 编译器中运行简单代码时出现运行时错误

c - 分离的线程不会同时运行

可以修改字符串文字和非字符串非复合文字吗?

c - 结构数组和 sizeof

c# - ASP.NET/C# 事件差异

java - 如何从新线程中取出变量?

c - 使用 pthreads 从终端写入和读取

windows - GDI+后台线程有什么作用?

c - 在 C 中使用互斥锁同步两个 pthread

c++ - 单线程和多线程代码同时耗时