继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

【学习打卡】第6天 C气象数据中心 第二章 2-11节,2-12节 linux信号量

一点积分
关注TA
已关注
手记 29
粉丝 6
获赞 2

课程名称:C/C++气象数据中心实战,手把手教你做工业级项目


课程章节:2.10 linux共享内存


主讲老师: 吴从周



课程内容:

  1. 描述并理解信号量的概念和原理。

  2. 采用测试程序对信号量的操作函数进行讲解

  3. 加深信号量在实际运用中的使用技巧。





课程收获:

  1. 信号量本身实质是一个非负数的计数器,我们使用其给共享资源建立标志,表示共享资源的占用情况,当共享资源被占用时,我们通过信号量反馈给此时此刻也需要调用此共享资源的程序,禁止其在此时调用共享资源。当共享资源调用结束时,我们通过改变信号量的值,表示此时开始可以进行对共享资源的访问。

    每个执行程序在进入临界区之前都应该先申请信号量,申请成功就有了操作特点的临界资源的权限,当操作完毕后就应该释放信号量。


  2. 信号量的PV操作,

    P操作:我们将申请信号量称为P操作,申请信号量的本质就是申请获得共享资源的使用权限,当申请成功时资源的数目应该减一,因此P操作的本质就是让计数器减一。

    V操作:我们将释放信号量称为V操作,释放信号量的本质就是直接归还共享资源的使用权限,当释放成功共享资源的数目就应该加一,因此V操作的本质就是让计数器加一。

    例如网吧的机子数量,这个数量是有限的,当一个人进行开机之后,机子数量就会减1,类似于P操作,下机之后,机子数量就会+1,类似于V操作。当共享空间需要只能同时被一个程序访问修改时,机子的数量就是1。

    注意:PV操作是原子操作,因为PV操作的本质上也应该是共享资源,不能重复对PV操作使用信号量机制

  3. 信号量的函数

     常用的就是初始化信号量函数,int sem_init(sem_t *sem, int pshared, unsigned int value);

    sem:需要初始化的信号量。semget函数用于创建或者获取信号量,返回值是信号量的标志码,和共享内存的操作函数十分类似。

    pshared:传入0值表示线程间共享,传入非零值表示进程间共享。

    value:信号量的初始值(计数器的初始值)。

    一般后两个参数都可以是缺省值,初始化信号量成功返回0,失败返回-1。

  4. semctl函数,sem_op函数

int semctl(int semid, int semnum, int cmd, ...);

    采用此函数可以对信号量进行高级操作,在生产实际中主要用于设置信号量的初始值。sem_op函数用于PV操作,信号量的值无法直接进行加减运算,需要通过op函数进行,PV操作中所运用的函数实际上是一样的,只是赋值不同。

http://img1.sycdn.imooc.com/62f0fd7300018e7e16370421.jpg




http://img4.sycdn.imooc.com/62f0fd80000191fd10340740.jpg








http://img1.sycdn.imooc.com/62f0ce080001775317310925.jpg

http://img2.sycdn.imooc.com/62f0f384000192db16920881.jpg

http://img1.sycdn.imooc.com/62f0fd9e0001d84c09550294.jpg


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP