栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

pthread_cond_wait用于2个线程

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

pthread_cond_wait用于2个线程

你有两个问题。首先是您没有

while()
正确使用循环-例如,在这里:

//wait for turnwhile( pthread_cond_wait(&condA, &mutex) != 0 )i++;

在体内

while
循环是声明
i++
-这将执行
pthread_cond_wait()
i++
直到
pthread_cond_wait()
返回一个错误,所以这基本上是一个死循环。

第二个问题是您不能单独使用pthreads条件变量-
它需要与一些实际的共享状态配对(最简单的说,此共享状态可能只是受互斥锁保护的标志变量)。该

pthread_cond_wait()
函数用于等待共享状态达到某个值,并且
pthread_cond_signal()
当线程更改共享状态时使用该函数。重新编写示例以使用这样的变量:

//global variablesenum { STATE_A, STATE_B } state = STATE_A;pthread_cond_t      condA  = PTHREAD_COND_INITIALIZER;pthread_cond_t      condB  = PTHREAD_COND_INITIALIZER;pthread_mutex_t     mutex = PTHREAD_MUTEX_INITIALIZER;void *threadA(){    int i = 0, rValue, loopNum;    while(i<5)    {                pthread_mutex_lock(&mutex);        while (state != STATE_A) pthread_cond_wait(&condA, &mutex);        pthread_mutex_unlock(&mutex);        //do stuff        for(loopNum = 1; loopNum <= 5; loopNum++) printf("Hello %dn", loopNum);                pthread_mutex_lock(&mutex);        state = STATE_B;        pthread_cond_signal(&condB);        pthread_mutex_unlock(&mutex);        i++;    }    return 0;}void *threadB(){    int n = 0, rValue;    while(n<5)    {                pthread_mutex_lock(&mutex);        while (state != STATE_B) pthread_cond_wait(&condB, &mutex);        pthread_mutex_unlock(&mutex);        //do stuff        printf("Goodbyen");                pthread_mutex_lock(&mutex);        state = STATE_A;        pthread_cond_signal(&condA);        pthread_mutex_unlock(&mutex);        n++;    }    return 0;}

需要注意的是使用两个条件变量的

condA
condB
不必要在这里-代码将是一样,如果正确使用的条件只有一个变量,而不是。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/408782.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号