#linux内核之旅#通过生产者与消费者模型感受死锁——西邮本科生的实验( 二 )
五.附录:源代码(电子版)
intin = 0; intout = 0; intbuff[M] = { 0};
sem_tsem_dr; sem_tsem_co; pthread_mutex_tmutex;
voidprint{ staticintnumber = 0; inti; printf( "(%2d)t",number); for(i = 0; i < M; i++) printf( "%d ", buff[i]); number++; printf( "n"); }
void* producer{ for(;;) { sleep( 1); P(sem_dr); pthread_mutex_lock(&mutex);in = in % M; printf( "(+)produce a product. buffer:"); buff[in] = 1; print; ++in;pthread_mutex_unlock(&mutex); V(sem_co); }}
void* consumer{ for(;;) { sleep( 1); pthread_mutex_lock(&mutex); P(sem_co);out = out % M; printf( "(-)consume a product. buffer:"); buff[out] = 0; print; ++out;pthread_mutex_unlock(&mutex); V(sem_dr); }}
voidsem_mutex_init{ intinit1 = sem_init(&sem_dr, 0, M); intinit2 = sem_init(&sem_co, 0, 0); if( (init1 != 0) && (init2 != 0)) { printf( "sem init failed n"); exit( 1); } intinit3 = pthread_mutex_init(&mutex, NULL); if(init3 != 0) { printf( "mutex init failed n"); exit( 1); } }
intmain{ pthread_tid1; pthread_tid2; inti; intret; sem_mutex_init; /*create the producer thread*/ret = pthread_create(&id1, NULL, producer, NULL); if(ret != 0) { 【#linux内核之旅#通过生产者与消费者模型感受死锁——西邮本科生的实验】printf( "producer creation failed n"); exit( 1); } ret = pthread_create(&id2, NULL, consumer, NULL); if(ret != 0) {printf( "consumer creation failed n"); exit( 1); } pthread_join(id1, NULL); pthread_join(id2, NULL); exit( 0); }
推荐阅读
- 新华社|中国重要草原游牧区千余户牧民踏上夏季转场之旅
- 大岭山|东莞微旅游|逛纪念馆,品美食,闻莞香,来趟别样的红色之旅
- 理念|佳通轮胎助力探索之旅,全心守护车主安全
- 自驾|河北青年报&保定金锎至臻奔驰——"驾享夏日"SUV征服之旅完美收官
- 澳大利亚|让您沉“醉”的澳大利亚的会奖之旅
- 三叶草故事家族|【你好!大自然】第151期:到地球的另一端——阿根廷智利之旅(5)
- 清朗读会|‘‘蔷薇花之旅”葡萄酒品鉴会掠影(内附彩蛋)
- 荥阳市妇幼保健院|【创甲之旅】荥阳市妇幼保健院院前急救岗前培训
- 金沙厅|Vlog.杭州 | 一次无计划的治(美)愈(食)之旅
- Luna占星之旅|Lunita2020年6月十二星座月运
