POSIX和system v

POSIX和system v都是一种应用于系统的协议,POSIX IPC和system v IPC可以用于进程间通讯

       1.函数上的区别:System V函数名没有下划线,POSIX函数名有下划线

        2.对信号量操作的方式:

                           POSIX IPC:使用sem_wait()对信号量减1、sem_post()对信号量的加1

                           system V: 使用semget()获取信号量标志符,sembuf设置,semop()使用信号

     3.POSIX 无名信号灯可以将数据放入共享内存用于进程间的通讯

     4.system v信号量有id

 

区别

system V信号量和Posix信号量

system v 实现对信号量加1代码

/*对信号量加一*/
void sem_v(int semid)
{
    struct sembuf sops = {0,1,0};//默认阻塞
     int ret = semop(semid,&sops, 1);
     if (ret == -1)
     {
         perror("");
     }
}

system p实现对信号量减1代码

//对信号量减1
void sem_p(int semid)
{
    struct sembuf sops = { 0,-1,0 };//默认阻塞
    int ret = semop(semid, &sops, 1);
    if (ret == -1)
    {
        perror("");
    }
}

以下外部对信号量减1的操作(外部获取信号量标志符,调用自定义的sem_p()、sem_v()函数即可对信号集进行操作)

#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <iostream>
#include <sys/shm.h>
#include <errno.h>
#include <stdio.h>
#include <unistd.h>
using namespace std;

int main()
{
    int semid = semget(1234, 0, 0);// get a System V semaphore set identifier
    if (semid == -1)
    {
       
        semid = semget(1234, 1, IPC_CREAT | 0666);//打开失败创建
    }

    sem_p(semid2);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/m0_49036370/article/details/114174354