进程间的通讯-----------信号量

《一》概念:访问临界资源的一个计数器。

            当信号量的值 > 0代表临界资源的剩余个数。

            当信号量的值 < 0, 代表等待使用界资源的进程个数

            临界资源: 同一时刻只允许一个进程使用的资源。

            临界区: 访问临界资源的代码区域

            原子操作: 不可再分的, 不可被打断的操作。(在中原子操作之前将中断操作屏蔽掉,操作前后才解开屏蔽)

             P,V 操作: P 操作 -1 V 操作 +1

《二》信号量的操作:

            获取、 创建:int semget((key_t)key, int nsems, int flag);

            key: 用户标识 nsems: 创建的时使用, 指定信号量集中信号数。 返回值返回的内核对象的 id

            初始化、释放:int semctl(int semid, int nums, int cmd, /*union semun un*/);

            P 操作: 对信号量的值-1

            V 操作: 对信号量的值+1

int semop(int semid, struct sembuf buf[], int nops);

struct sembuf

{

             int sem_num; // 指定操作的信号量集中的下标
             short sem_op; // P 操作: -1V 操作: 1
             short sem_flg; // IPC_NOWAIT SEM_UNDO
}

《三》信号量的代码测试:

信号量的获取  P  V操作以及释放的实现

Sem.c

A进程

B进程

猜你喜欢

转载自blog.csdn.net/weixin_41537785/article/details/81215363