1、进程a ;

完成信号量的创建和设置;

做定时器,每1s sem_post 信号量一次;

 1 #include <stdio.h>
 2 #include <fcntl.h>
 3 #include <stdlib.h>
 4 #include <unistd.h>
 5 #include <semaphore.h>
 6
 7 //利用select函数完成一个定时器的功能;
 8 void setTimer(int seconds, int microseconds)
 9 {
10         struct timeval temp;
11         temp.tv_sec = seconds;
12         temp.tv_usec = microseconds;
13         select(0, NULL, NULL, NULL, &temp);
14         return ;
15 }
16
17 int main()
18 {
19     sem_t* a;
20     int er=0;
21
22     sem_unlink("share_data"); //若内存中已经存在名为“sem_test”的信号量,则将其删除;
23
24     // 创建一个名为"sem_test"的信号量,并将其值初始化为1,a为sem_t型指针,指向该信号量;
25     a=sem_open("share_data", O_CREAT ,(S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH), 1);
26     if(NULL==a)
27     {
28         printf("sem_open failure!\n");
29     }
30
31     //将该信号量赋为1,且为进程间共享型信号量;
32     sem_init(a,1,0);
33
34     //获取当前信号量的值;
35     sem_getvalue(a, &er);
36     while(1)
37     {
38          if(er==0)
39          {
40              sem_post(a);
41          }
42          setTimer(1,0);
43          sem_getvalue(a, &er);
44          printf("%d\n",er);
45     }
46     return 0;
47 }

2:进程b;

当信号量被 a 进程进行sem_post后,进程b由阻塞态变为可执行;

 1 /*
 2  ============================================================================
 3  Name        : share_data_a.c
 4  Author      :
 5  Version     :
 6  Copyright   : Your copyright notice
 7  Description : Hello World in C, Ansi-style
 8  ============================================================================
 9  */
10
11 #include <stdio.h>
12 #include <fcntl.h>
13 #include <stdlib.h>
14 #include <unistd.h>
15 #include <semaphore.h>
16
17 int main()
18 {
19     sem_t* a;
20
21     //sem_open()函数第2个参数为0,表示打开已存在的名为"share_data"的信号量;
22
23     a=sem_open("share_data", 0, (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH), 1);
24
25     if(NULL==a)
26     {
27         printf("sem_open failure!\n");
28     }
29     int i=0,er;
30     while(1)
31     {
32       sem_wait(a);        //当进程 a 完成sem_post动作时,该进程开始继续执行;
33       printf("i = %d\n",i++);
34     }
35     return 0;
36 }

转载于:https://www.cnblogs.com/GuanghuiLiu/p/8485404.html

使用信号量实现进程间同步相关推荐

  1. 进程间同步(互斥量、信号量)

    进程间同步可以使用互斥量mutex(互斥锁).信号量和文件锁. 进程间同步使用信号量: int sem_init(sem_t *sem, int pshared, unsigned int value ...

  2. linux 进程间读写锁,Linux系统编程—进程间同步

    我们知道,线程间同步有多种方式,比如:信号量.互斥量.读写锁,等等.那进程间如何实现同步呢?本文介绍两种方式:互斥量和文件锁. ##互斥量mutex 我们已经知道了互斥量可以用于在线程间同步,但实际上 ...

  3. 进程间同步的几种方法

    什么是临界区? 每个进程中访问临界资源的那段程序称为临界区(临界资源是一次仅允许一个进程使用的共享资源).每次只准许一个进程进入临界区,进入后不允许其他进程进入. 进程间同步 把异步环境下的一组并发进 ...

  4. 利用管道实现进程间同步

    进程间同步是指进程的运行有先后顺序,如A进程等待B进程执行完某个动作A进程才能继续往下运行.进程间通信的方法都可以用来同步,只是操作是否方便的一个问题.复习了UNIX高级编程,觉得POSIX的信号量是 ...

  5. 如何保证进程间同步工作_系统设计硬核知识(2)——操作系统的进程管理

    操作系统基本原理包含以下 5 大管理. 我们先来说说进程管理. 因为处理机是计算机系统的核心资源,所以整个操作系统的重心是处理机管理. 处理机管理中最基本的.最重要的概念是进程.进程是系统并发执行的体 ...

  6. linux应用编程之进程间同步

    一.描述 在操作系统中,异步并发执行环境下的一组进程,因为相互制约关系,进而互相发送消息.互相合作.互相等待,使得各进程按一定的顺序和速度执行,称为进程间的同步.具有同步关系的一组并发进程,称为合作进 ...

  7. android p获取通话记录_Android 底层的进程间同步机制

    作者:Android面试官 进程间通信的经典实现 进程间通信(Inter-process communication,IPC)指运行在不同进程中的若干线程间的数据交换,可发生在一台机器上,也可通过网络 ...

  8. C++信号量实现线程间同步,windows使用SetEvent,linux使用sem_t,QT测试

    目录 windows使用CreateEvent.SetEvent.ResetEvent.WaitForSingleObject linux使用sem_init.sem_wait.sem_trywait ...

  9. (28)System Verilog进程间同步(事件event)

    (28)System Verilog进程间同步(事件event) 1.1 目录 1)目录 2)FPGA简介 3)System Verilog简介 4)System Verilog进程间同步(事件eve ...

最新文章

  1. Windows上编译OpenEXR
  2. 汇编语言 第一单元 整理(补充)
  3. Educational Codeforces Round 67
  4. wps分析工具库如何加载_分析为周杰伦打榜的夕阳红老年团,告诉你他们真实年龄!...
  5. 申请免费域名、配置域名以及https证书设置
  6. 阿里云学生服务器购买教程(附用途案例)
  7. 调用微信内置浏览器实现微信打开的网页上的图片能点击打开的效果
  8. 做自媒体视频变现的三大要素!
  9. 手机投屏电视显示服务器连接失败,投屏失败怎么办?两种投屏到电视的方法教学...
  10. CVer最想知道的,简单分析下《2020年度中国计算机视觉人才调研报告》
  11. 原码,反码,补码详解及原理
  12. 超大文件上传-如何上传文件-大文件上传
  13. 技术 | 有道CEO周枫:NVidia Volta GPU深度学习性能提升近10倍
  14. 六、分享优秀的Armv8 虚拟化技术地址
  15. Hadoop、Pig、Hive、Storm、NOSQL 学习资源收集【Updating】
  16. 97-things-every-programmer-should-know-1: 谨慎行事
  17. FreeModbus V1.6 主机
  18. 北大青鸟深圳嘉华分享MySQL用户管理
  19. 调用ThunderAgent 迅雷局域网版的开发
  20. [python]简易计算器

热门文章

  1. npm 卸载_手把手教你创建一个NPM包
  2. c语言输出的时候换行错误,C语言中关于输出n个数后就换行的问题。
  3. 华为上半年手机销量_上半年国内智能手机销量下滑24.7%;华为MatePad 10.8或搭载麒麟990;三星将研发PC芯片;AMD股价超英特尔...
  4. mysql8jdbc连接串_mysql8 JDBC连接注意事项
  5. 微信小程序获取不到unionid还有小程序无法解析JSON字符串的问题
  6. 浅谈Promise对象在ReactNative中的使用
  7. 一条正确的Java职业生涯规划,顺利拿到offer
  8. python基础练习(一)
  9. 安卓9全局圆角_三星S9+升级最新系统ONE UI体验,安卓9.0带来哪些惊喜?
  10. simulink仿真实例_MATLAB机器人运动学仿真入门