C 螺纹don';不要终止他们的工作

C 螺纹don';不要终止他们的工作,c,multithreading,pthreads,C,Multithreading,Pthreads,我正在编写一个并发C程序,我希望在main()中等待所有线程完成 基于,我在main()中编写了以下代码: 所有线程都已成功创建和执行,但如果num\u mappers>=2,则联接循环将永远不会结束。您返回时未解锁互斥锁: pthread_mutex_lock(&g_lock); if (g_cur >= g_numfull){ // No works to do, just quit return NULL; <-- mu

我正在编写一个并发C程序,我希望在
main()
中等待所有线程完成

基于,我在
main()
中编写了以下代码:


所有线程都已成功创建和执行,但如果
num\u mappers
>=2,则联接循环将永远不会结束。

您返回时未解锁互斥锁:

    pthread_mutex_lock(&g_lock);
    if (g_cur >= g_numfull){
        // No works to do, just quit
        return NULL;  <-- mutex is still locked here
    }

    // Get the file name
    char *filename = g_job_queue[g_cur];
    g_cur++;
    pthread_mutex_unlock(&g_lock);

返回时不解锁互斥锁:

    pthread_mutex_lock(&g_lock);
    if (g_cur >= g_numfull){
        // No works to do, just quit
        return NULL;  <-- mutex is still locked here
    }

    // Get the file name
    char *filename = g_job_queue[g_cur];
    g_cur++;
    pthread_mutex_unlock(&g_lock);

g\u cur
大到可以退出时,在
map\u consumer
中会发生什么?线程是否保持其
pthread\u mutex\u锁
?@grorel哦,我明白了!我必须
解锁
才能返回,否则所有其他线程都在等待获得锁。谢谢当
g\u cur
大到可以退出时,在
map\u consumer
中会发生什么?线程是否保持其
pthread\u mutex\u锁
?@grorel哦,我明白了!我必须
解锁
才能返回,否则所有其他线程都在等待获得锁。谢谢有一些RAII或<代码>很好,在这些情况下尝试< <代码> > />代码>最后< /COD>,但我想这就是C++存在的原因。@ GRO:我的想法也是完全正确的,RAII规则!我已经成功地使用了C++和纯pthices的结合,在瘦线程的STD::线程在p螺纹的顶部隐藏了一些更新奇的p螺纹设置/配置。但我想这就是为什么C++存在的原因。在很多时候,在与pthLoad相关的瘦STD::线程层隐藏了一些更新奇的pHOREST设置/配置文件时,我已经成功地使用C++与纯pTrx相结合。
    pthread_mutex_lock(&g_lock);
    if (g_cur >= g_numfull){
        // No works to do, just quit
        return NULL;  <-- mutex is still locked here
    }

    // Get the file name
    char *filename = g_job_queue[g_cur];
    g_cur++;
    pthread_mutex_unlock(&g_lock);
    pthread_mutex_lock(&g_lock);
    if (g_cur >= g_numfull){
        // No works to do, just quit
        pthread_mutex_unlock(&g_lock);
        return NULL;
    }

    // Get the file name
    char *filename = g_job_queue[g_cur];
    g_cur++;
    pthread_mutex_unlock(&g_lock);