c语言实现多个生产者和消费者.docVIP

  • 90
  • 0
  • 约2.29千字
  • 约 7页
  • 2021-08-11 发布于山东
  • 举报
c语言实现多个生产者和消费者 c语言实现多个生产者和消费者 PAGE / NUMPAGES c语言实现多个生产者和消费者 操作系统的一个经典问题是 生产者 - 花费者 问题, 这波及同步信号 量和互斥信号量的应用 , 在这里 , 我用线程的同步和互斥来实现 . /* author 张文 2008/06/20 */ #include stdio.h #include stdlib.h #include unistd.h #include pthread.h #include semaphore.h #define N 2  // 花费者或许生产者的数目 #define M 10  // 缓冲数目 int in = 0;  // 生产者搁置产品的地点 int out = 0;  // 花费者取产品的地点 int buff[M] = {0};  // 缓冲初始化为  0, 开始时没有产品 sem_t empty_sem; // 同步信号量, 当满了时阻挡生产者放产品 sem_t full_sem; // 同步信号量, 当没产品时阻挡花费者花费 pthread_mutex_t mutex; // 互斥信号量, 一次只有一个线程接见缓 冲 int product_id = 0; // 生产者 id int prochase_id = 0; // 花费者 id /* 打印缓冲状况 */ void print() { int i; for(i = 0; i M; i++) printf(%d , buff[i]); printf(\n); } /* 生产者方法 */ void *product() { int id = ++product_id; while(1) { 用 sleep 的数目能够调理生产和花费的速度,便于察看 sleep(1); //sleep(1); sem_wait(empty_sem); pthread_mutex_lock(mutex); in = in % M; printf(product%d in %d. like: \t, id, in); buff[in] = 1; print(); ++in; pthread_mutex_unlock(mutex); sem_post(full_sem); } } /* 花费者方法 */ void *prochase() { int id = ++prochase_id; while(1) { 用 sleep 的数目能够调理生产和花费的速度,便于察看 sleep(1); //sleep(1); sem_wait(full_sem); pthread_mutex_lock(mutex); out = out % M; printf(prochase%d in %d. like: \t, id, out); buff[out] = 0; print(); ++out; pthread_mutex_unlock(mutex); sem_post(empty_sem); } } int main() { pthread_t id1[N]; pthread_t id2[N]; int i; int ret[N]; 初始化同步信号量 int ini1 = sem_init(empty_sem, 0, M); int ini2 = sem_init(full_sem, 0, 0); if(ini1 ini2 != 0) { printf(sem init failed \n); exit(1); } 初始化互斥信号量 int ini3 = pthread_mutex_init(mutex, NULL); if(ini3 != 0) { printf(mutex init failed \n); exit(1); } 创立 N个生产者线程 for(i = 0; i N; i++) { ret[i] = pthread_create(id1[i], NULL, product, (void *)(i)); if(ret[i] != 0) { printf(product%d creation failed \n, i); exit(1); } } 创立 N个花费者线程 for(i = 0; i N; i++) { ret[i] = pthread_create(id2[i], NULL, prochase, NULL); if(ret[i] != 0) { printf(prochase%d creation failed \n, i); exit(1); } } 销毁线程 for(i = 0; i N; i++) { pthread_join(id

文档评论(0)

1亿VIP精品文档

相关文档