信号量的使用

1:信号量头文件:

#include <semaphore.h>

2:定义信号量:

sem_t AAA;

3:初始化信号量:

sem_init(&AAA, X, Y);

AAA:定义的信号量结构的指针;

X:一般设置成0,表示此信号量在当前进程的所有线程共享;不为0,表示此信号量在进程间共享;

Y:给信号量的初始化值;

4:用来增加信号量初始化Y的值,每次会使初始化Y的值 “+1”,该操作是原子操作,即不同线程或进程同时调用该函数,不会发生冲突,都会实现(例如A B C三个线程都调用了此函数增加信号量AAA的值,产生的结果是 “Y = Y + 3 ”);但是如果不同线程对于同一个文件进行读、加和写操作的两个程序就有可能会引起冲突。

sem_post(&AAA);  

5:用来减少信号量初始化Y的值,每次会使初始化Y的值 “-1”,该操作是原子操作,即不同线程或进程同时调用该函数,不会发生冲突,都会实现(例如A B C三个线程都调用了此函数增加信号量AAA的值,产生的结果是 “Y = Y - 3 ”);假设当前Y的值为1,A B C三个线程同时调用了该函数,则只有最先调用sem_wait(假定是A)A的会 “-1”,并继续向下运行,另外两个线程B和C会继续等待,直到有其他的线程或者进程调用sem_post(&AAA)来使信号量的值不为0,才会继续向下运行(如果信号量的值增加了1,即Y等于1,那么B和C中只有一个线程可以运行,另外一个需要继续等待其他的线程或者进程调用sem_post(&AAA)来使信号量的值不为0)。

注释:只有在信号量Y值不为0的时候,才会执行 -1的操作,并向下执行,当前如果信号量Y值为0,会卡在当前位置等待,直到Y值不为0.

sem_wait(&AAA);

5:释放信号量:

sem_destroy(&AAA);

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值