设为首页 加入收藏

TOP

linux 互斥锁和条件变量(二)
2019-06-14 18:08:17 】 浏览:193
Tags:linux 条件 变量
utex_t mutex; int idx; int val; } shared = { PTHREAD_MUTEX_INITIALIZER }; struct { pthread_mutex_t mutex; pthread_cond_t cond; int nready; } nready = { PTHREAD_MUTEX_INITIALIZER, PTHREAD_COND_INITIALIZER }; void* produce(void*); void* consume(void*); int main(int argc, char** argv){ int i; int nthreads; int count[MAXTHREAD]; pthread_t tid_produce[MAXTHREAD], tid_consume; if(argc != 3){ printf("arg error\n"); return 1; } nitem = min(MAXITEM,atoi(argv[1])); nthreads = min(MAXTHREAD, atoi(argv[2])); for(i = 0; i < nthreads; ++i){ count[i] = 0; pthread_create(&tid_produce[i], NULL, produce, &count[i]); } pthread_create(&tid_consume, NULL, consume, NULL); for(i = 0; i < nthreads; ++i){ pthread_join(tid_produce[i], NULL); printf("cout[%d] = %d\n", i, count[i]); } pthread_join(tid_consume, NULL); return 0; } void* produce(void* arg){ while(1){ pthread_mutex_lock(&shared.mutex); if(shared.idx >= nitem){ pthread_mutex_unlock(&shared.mutex); return NULL; } buf[shared.idx] = shared.val; shared.idx++; shared.val++; pthread_mutex_unlock(&shared.mutex); pthread_mutex_lock(&nready.mutex); if(nready.nready == 0){ pthread_cond_signal(&nready.cond); } nready.nready++; pthread_mutex_unlock(&nready.mutex); *((int*) arg) += 1; } } void* consume(void* arg){ int i; for(i = 0; i < nitem; ++i){ pthread_mutex_lock(&nready.mutex); while(nready.nready == 0){ pthread_cond_wait(&nready.cond, &nready.mutex); } nready.nready--; pthread_mutex_unlock(&nready.mutex); if(buf[i] != i){ printf("buf[%d] = %d\n", i, buf[i]); } } printf("buf[%d] = %d\n", nitem-1, buf[nitem-1]); }
首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇c语言递归讲解分析 下一篇个人学习笔记:C语言程序结构

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目