文章结束给大家来个程序员笑话:[M]

这篇文章介绍下信号量,信号量的功能并不是进程间通信,是进程间同步。在线程部份已提到过信号量的概念,用到的是匿名信号量,能够实现线程间的同步。

上篇文章中

一样Linux提供给我们两种信号量:SystemV的信号量和Posix的信号量。

仍然是先来看下Posix的信号量(须要-lrt),相关函数如下:

sem_t *sem_open(const char *name, int oflag);
sem_t *sem_open(const char *name, int oflag, mode_t mode, unsigned int value);
int sem_close(sem_t *sem);
int sem_unlink(const char *name);
int sem_wait(sem_t *sem);
int sem_trywait(sem_t *sem);
int sem_timedwait(sem_t *sem, const struct timespec *abs_timeout);
int sem_post(sem_t *sem);
int sem_getvalue(sem_t *sem, int *sval);

匿名信号量应用sem_init()函数来打开,而定名信号量应用sem_open()来打开,相关操作和共享内存是类似的。应用sem_close()关闭 sem_unlink()删除。信号量的电灯灭灯操作和匿名信号量是一样的。

SystemV的信号量其实并不是信号量而是信号量集,是多个信号量的集合(当然可以只有一个)。创建/打开信号量的函数是semget():

int semget(key_t key, int nsems, int semflg);

这个函数在应用上和msgget() shmget()是类似的,除了多一个nsems参数,表示的是信号量会合信号量的个数。

SystemV信号来那个的初始化和获得/设置值应用semctl()函数:

每日一道理
灯,带有一种明亮的光,每当深夜来临,是它陪伴着你,如此默默无闻。它是平凡的,外表华丽与否,那都是一样的,珍珠点缀,水晶加饰的灯它只能用以装饰,来满足人们的虚荣心,比起这,普普通通的日光灯是幸运的,因为它照明的本性没有改变,如同生活中的一部份人平平凡凡却实实在在。
int semctl(int semid, int semnum, int cmd, .../* union semnum arg */);

cmd:

IPC_RMID(删除信号量) SETVAL(设置第semnum信号量的值) GETVAL(获得semnum信号量的值)SETALL(设置全部信号量的值) GETALL(获得全部信号量的值)

相关值是又公用体arg传递的,union semnum的结构:

union semun {int   val;    /* Value for SETVAL */unsigned short  *array;  /* Array for GETALL, SETALL */
};

如果是SETVAL GETVAL应用的val,GETALL SETALL应用的array。

信号量的PV操作(点灯 灭灯),应用semop停止操作:

int semop(int semid, struct sembuf *sops, unsigned nsops);

sops是操作数组,nsops是数组的长度。struct smebuf的结构如下:

struct sembuf {unsigned short sem_num;     /*   semaphore number   */short sem_op;                      /*  semaphore operation  */short sem_flg;                     /*   operation flag            */
};

sem_num是操作的第几个信号量,sem_op是执行的PV操作,如1 2 -1 -2。sem_flg是参数,包括:

IPC_NOWAIT(对信号的操作不能满足时,semop()不会阻塞,当即返回并设置errno)、

SEM_UNDO(将会自动撤消该进程终止时)。

文章结束给大家分享下程序员的一些笑话语录: 乔布斯:怎么样还是咱安全吧!黑客:你的浏览器支持国内网银吗?苹果可以玩国内的网游吗乔布斯:......不可以黑客:那我研究你的漏洞干嘛,我也需要买奶粉!

--------------------------------- 原创文章 By
进程间通信和学习
---------------------------------

转载于:https://www.cnblogs.com/xinyuyuanm/archive/2013/05/30/3108969.html

进程间通信学习APUE学习---进程间通信(4)相关推荐

  1. 迅为嵌入式Linux学习笔记5——进程间通信

    迅为嵌入式Linux学习笔记5--进程间通信 管道通信 无名管道 无名管道只能实现有亲缘关系的进程之间的通信,比如父子进程. pipe函数: #include <unistd.h> int ...

  2. Linux学习笔记8—进程间通信

    - 本人的LeetCode账号:魔术师的徒弟,欢迎关注获取每日一题题解,快来一起刷题呀~ 本人Gitee账号:路由器,欢迎关注获取博客内容源码. 文章目录 一.进程间通信引出 二.进程间通信的目的 三 ...

  3. apue学习之文件IO第二部分

    学习apue课程已经有一个多月了,有很多知识点需要自己去总结: 下面是主要的几个函数的介绍: 1-stat()函数是获得文件的主要信息.在linux当中主要以一个结构体来保存文件的信息,其中每一个字段 ...

  4. APUE学习的经验(引以为戒)

    前段时间在学习Linux,在没有感悟之前我是不敢把所得放到这里的.所以就一直没有新的文章,很惭愧啊. 根据在网上搜集到的学习Linux的学习路线和自己当前对Linux的理解,我认为我可以学习APUE了 ...

  5. 深度学习 免费课程_深入学习深度学习,提供15项免费在线课程

    深度学习 免费课程 by David Venturi 大卫·文图里(David Venturi) 深入学习深度学习,提供15项免费在线课程 (Dive into Deep Learning with ...

  6. vs2010 学习Silverlight学习笔记(7):控件样式与模板

    概要: 终于知道Silverlight--App.xaml是干什么用的了,不仅可以用来封装样式(类似css),还可以制定控件模版...好强大的功能啊. 封装: 继续学习<一步一步学Silverl ...

  7. 与 Linux 一起学习:学习打字

    "与 Linux 一起学习"的所有文章: 与 Linux 一起学习:学习打字 与 Linux 一起学习:学习物理 与 Linux 一起学习:学习音乐 与 Linux 一起学习:学习 ...

  8. 还只看花书,西瓜书?一文告诉你如何正确学习深度学习,从理论到实战。

    如今春招已接近尾声,大家都知道今年就业形势整体不乐观,不仅应聘人数远远大于招聘岗位,而且面试难度加大,想拿到理想的offer更是难上加难! 这段时间,很多人都在自我充电,我也经常在后台给读者解答很多深 ...

  9. 最新版动手学习深度学习和GAN电子书免费下载!

    今天给大家推荐一个GAN方面的优质公众号---机器学习与生成对抗网络.该公众号里分享了几本深度学习.GAN等好的电子书资源! 强烈推荐李沐等人的<动手学习深度学习>最新版!完整中文版 PD ...

  10. 2020人工智能课程超级大列表:深度学习-强化学习-图神经网络-自然语言处理等...

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 本篇博文主要为大家介绍一个课程网站,汇集了机器学习,深度学习.强化学习的各个方面, ...

最新文章

  1. Python学习日志(5)- Numpy
  2. Redis作者的公开信:开源维护者的挣扎和无奈
  3. 谷歌对用户搜索加密这一做法对seo的影响!
  4. android自定义view生命周期,android基础之自定义view
  5. AT3955-[AGC023D]Go Home【结论,递归】
  6. 企业网络之间资源互访
  7. [COCI2011-2012#7] KAMPANJA
  8. linux中文件输出输入,linux中文件输入输出的管理
  9. SQL:pgsql插入数据
  10. win10配置python3虚拟环境_win10下搭建python3+scarpy虚拟环境
  11. 【洛谷 P3979】遥远的国度【树链剖分、换根】
  12. HTTP方式文件分片断点下载
  13. PS如何为图片添加四面投影
  14. 线性方程组求解——基于MTALAB/Octave,Numpy,Sympy和Maxima
  15. 文件操作fwrite写txt文件乱码怎么办,我这里有方法解决
  16. win10安装PyPESQ库
  17. ununtun学习系列1--- sudo update与upgrade区别
  18. x射线管的kV、mA、mAs
  19. Wish店铺如何防关联
  20. Codeforces Round #625 (Div. 2, based on Technocup 2020 Final Round)【A、B、C题】

热门文章

  1. Echarts关系图(使用重力图)
  2. 笔谈FFmpeg(二)
  3. AFNetWorking网络库教程
  4. InteliiJ IDEA的安装配置与简单使用
  5. bootstrap 和 jqueryui
  6. 完美配置Tomcat的HTTPS
  7. IOS开发之Target-Action模式
  8. 转:前端冷知识(~~some fun , some useful)
  9. 搭建cacti 期间问题总结
  10. 1.Jenkins 权威指南 --- 在Jenkins 中构建第一个项目