linux_C_IPC

semaphore

使用头函数:semaphore.h

函数解释
int sem_init(sem_t *sem,int pshared,int valuse)创建信号量,value为初始值,pshared为最多多少个进程共享
int sem_destroy(sem_t *sem)销毁信号量
int sem_wait(sem_t *sem)阻塞进程直到sem>0,返回时信号量自动value-1
int sem_trywait(sem_t *sem)不阻塞进程,等待信号量为0时返回EAGAIN,表示重试
int sem_getvalue(sem_t *sem)获得sem的值
int sem_post(sem_t *sem)将信号量值+1并唤醒等待的进程

编译时候加上-lrt表示连接librt.so库

system V

使用头函数:sys/ipc.h&&sys/sem.h

函数解释
key_t ftok(char *pathname,char proj)根据pathname和proj创建关键字,也可以是IPC_PRIVATE的系统关键字
int semget(key_t key,int nsems,int semflg)设置信号量,nsems为信号量的个数,semflg时权限标志(同文件的权限的标志)
int semctl(int semid,int semnum,int cmd,union semun arg)对sem的一系列控制,semid是操作的信号,semnum是信号个数,cmd是操作命令,常用的(SETVAL(设置信号量值),IPC_RMID(删除信号量))arg是cmd的参数
int semop(int semid,struct sembuf *spos,int nspos)对sem操作,spos是操作的数组,表面要进行什么操作,npos是数组个数

struct sembuf{
short sem_id;
short sem_op;//什么操作
short sem_flg;//操作标志
}
/*sem_op>0   sem_op加入信号量中,并唤醒等待信号增加的进程
sem_op=0     函数返回,否则阻塞直到值为0
sem_op <0 函数判断value=pro_value(进程的信号量)+sem_op;value=0,唤醒等待量为0的进程,<0,阻塞,>0,返回。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值