互斥量
来源:互联网 发布:java程序员怎么认证 编辑:程序博客网 时间:2024/05/16 15:09
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <pthread.h>#include <errno.h>#define MAXNITEMS 1000000#define MAXNTHREADS 100int nitems;struct{ pthread_mutex_t mutex; int buff[MAXNITEMS]; int nput; int nval;} shared = { PTHREAD_MUTEX_INITIALIZER};void *produce(void*);void *consume(void*);int main(int argc,char *argv[]){ int i,nthreads,count[MAXNTHREADS]; pthread_t tid_produce[MAXNTHREADS],tid_consume; if(argc != 3) { printf("usage: producongs2 <#itmes> <#threads>.\n"); exit(0); } nitems = atoi(argv[1]); nthreads = atoi(argv[2]); pthread_setconcurrency(nthreads); //设置线程并发级别 for(i=0;i<nthreads;++i) { count[i] = 0; pthread_create(&tid_produce[i],NULL,produce,&count[i]); } for(i=0;i<nthreads;i++) { pthread_join(tid_produce[i],NULL); //等待线程退出 printf("count[%d] = %d\n",i,count[i]); } pthread_create(&tid_consume,NULL,consume,NULL); pthread_join(tid_consume,NULL); //等待线程退出 exit(0);}void *produce(void *arg){ for(; ;) { pthread_mutex_lock(&shared.mutex); //加锁 if(shared.nput >= nitems) { pthread_mutex_unlock(&shared.mutex); //释放锁 return ; } shared.buff[shared.nput] = shared.nval; shared.nput++; shared.nval++; pthread_mutex_unlock(&shared.mutex); //加锁 *((int*) arg) += 1; }}void *consume(void *arg){ int i; for(i=0;i<nitems;i++) { if(shared.buff[i] != i) printf("buff[%d] = %d\n",i,shared.buff[i]); } return;}
0 0
- 互斥量
- 互斥量
- 互斥量
- 互斥量
- 互斥量
- 互斥量
- 互斥量
- 互斥量使用方法
- 互斥量理解
- 有关互斥量
- 互斥量Mutex
- 互斥量Mutex
- 6.互斥量
- RAII:互斥量
- Unix互斥量
- 互斥量+信号量
- 信号量&互斥量
- Mutex(互斥量)
- any object does not have a member named generator
- iOS开发解决方案:An error was encountered while running(Domain=FBSOpenApplicationErrorDomain, Code=4)
- 83屏幕锁屏时,widget不再更新(省电优化)
- 通过dfs求排列
- cocos2dx3.2 嘿别犯傻了,reserve是保留而不是反转
- 互斥量
- python创建快捷方式
- Hibernate动态条件查询并分页
- PowerDesigner生成SQL脚本时表名、字段名带引号问题及解决方法
- Struts2的默认action配置真的是bug?
- 十进制与任意进制的转换
- Linux安装中文输入法(Google拼音输入法)
- swift中http请求URL中空格问题
- SpagoBI连接Mysql