zoukankan      html  css  js  c++  java
  • Linux下生产者与消费者的线程实现

    代码见《现代操作系统》 第3版。

    为了显示效果,添加了printf()函数来显示运行效果

     1 #include<stdio.h>
     2 #include<pthread.h>
     3 #define MAX 20
     4 pthread_mutex_t the_mutex;
     5 pthread_cond_t condc, condp;
     6 int buffer = 0;
     7 
     8 void *producer(void *ptr)
     9 {
    10     int i;
    11     for(i = 1; i <= MAX; i++)
    12     {
    13         pthread_mutex_lock(&the_mutex);
    14         while(buffer != 0) pthread_cond_wait(&condp, &the_mutex);
    15         buffer = i;
    16         printf("%d ", buffer);
    17         pthread_cond_signal(&condc);
    18         pthread_mutex_unlock(&the_mutex);
    19     }
    20     pthread_exit(0);
    21 }
    22 
    23 void *consumer(void *ptr)
    24 {
    25     int i;
    26     for(i = 1; i < MAX; i++)
    27     {
    28         pthread_mutex_lock(&the_mutex);
    29         while(buffer == 0)pthread_cond_wait(&condc, &the_mutex);
    30         buffer = 0;
    31         printf("%d ", buffer);
    32         pthread_cond_signal(&condp);
    33         pthread_mutex_unlock(&the_mutex);
    34     }
    35     pthread_exit(0);
    36 }
    37 
    38 int main(void)
    39 {
    40     pthread_t pro, con;
    41     pthread_mutex_init(&the_mutex, 0);
    42     pthread_cond_init(&condc, 0);
    43     pthread_cond_init(&condp, 0);
    44     pthread_create(&con, 0, consumer, 0);
    45     pthread_create(&pro, 0, producer, 0);
    46     pthread_join(pro, 0);
    47     pthread_join(con, 0);
    48     pthread_cond_destroy(&condc);
    49     pthread_cond_destroy(&condp);
    50     pthread_mutex_destroy(&the_mutex);
    51 }

    编译命令

    gcc -lpthread -o procro procro.c

    运行后的效果如:

  • 相关阅读:
    android 通知栏 notifcation
    通过ResultSet获取到rs的记录数的几种方法
    网上书城随笔
    jdbc 事务
    正则表达式
    String,StringBuffer与StringBuilder的区别??
    Java 之 FileReader FileInputStream InputStreamReader BufferedReader 作用与区
    算法
    呵呵
    Hibernate
  • 原文地址:https://www.cnblogs.com/SC-CS/p/6266798.html
Copyright © 2011-2022 走看看