zoukankan      html  css  js  c++  java
  • 线程同步一例

    功能:主线程创建一个副线程,然后主线程负责将键盘输入的内容写到buffer,然后通知副线程将数据打印,打印完后,副线程通知主线程继续从输入缓冲区中将读到的字符写到buffer数组。当输入quit命令时,主线程退出,副线程也会随着主线程的结束而自动结束。

     1 #include <stdio.h>
     2 #include <pthread.h>
     3 #include <semaphore.h>
     4 #include <stdlib.h>
     5 #include <string.h>
     6 
     7 
     8 char buffer[128];
     9 sem_t sem1;
    10 sem_t sem2;
    11 
    12 void *fun(void * arg)
    13 {
    14 
    15     while(1)
    16     {
    17         if(sem_wait(&sem2) == -1)  //读之前申请读信号
    18         {
    19             perror("sem_wait sem2");
    20             exit(-1);
    21         }
    22         printf(">>>%s",buffer);
    23         if(sem_post(&sem1) == -1)  //读完了后发送写信号
    24         {
    25             perror("sem_wait sem2");
    26             exit(-1);
    27         }
    28     }
    29 
    30 }
    31 
    32 int main(void)
    33 {
    34 
    35     pthread_t thread;
    36 
    37     if(sem_init(&sem1, 0, 1) == -1)  //将写信号初始化为1
    38     {
    39         perror("sem_init");
    40         exit(-1);
    41     }
    42     if(sem_init(&sem2, 0, 0) == -1) //将读信号初始化为0
    43     {
    44         perror("sem_init");
    45         exit(-1);
    46     }
    47     if(-1 == pthread_create(&thread, NULL, fun, NULL))  //创建线程
    48     {
    49         exit(-1);
    50     }
    51 
    52     do
    53     {
    54         if(sem_wait(&sem1) == -1)  //写之前申请写资源
    55         {
    56             perror("sem_wait sem1");
    57             exit(-1);
    58         }
    59         fgets(buffer, 128, stdin);
    60         if(sem_post(&sem2) == -1)  //写之后发送读资源
    61         {
    62             perror("sem_wait sem1");
    63             exit(-1);
    64         }
    65     }while(strncmp(buffer, "quit", 4) != 0); //输入quit,主线程结束,副线程也就退出
    66 
    67 
    68     return 0;
    69 }
    View Code

    image

  • 相关阅读:
    Spring基础07——配置集合属性
    Spring基础06——依赖注入的一些细节
    Spring基础05——Spring依赖注入的三种方式
    Spring基础04——ApplicationContext
    bat文件设置ip自动和静态ip切换
    新增妹子动画
    达梦、oracel、mysql数据库兼容
    日期校验正则表达式
    JAVA实现HTTP请求
    javacv获取视频第一帧
  • 原文地址:https://www.cnblogs.com/pengdonglin137/p/2950697.html
Copyright © 2011-2022 走看看