- 如果项目组之间需要紧密合作,那就需要共享内存,这样就像把两个项目组放在一个会议室一起沟通,会非常高效
- 有了共享内存机制之后,两个进程就可以像访问自己内存中的变量一样,访问共享内存的变量。但是同时问题也来了,当两个进程共享内存了,就会存在同时读写问题,这就需要对共享内存进行保护,这需要信号量这样的同步机制
一、导入头文件
二、创建或访问信号量数组 内存中没有该信号量时,创建,如果内存中有该信号量则直接访问
int semget(key_t key, int nsems, int semflg);
参数1:key 一个正整数,信号量的键值,不同的进程将通过这个值访问到同一个信号量
参数2:nsems 信号量是一个数组,nsems是数组长度,表示需要使用的信号量个数,通常取1,表示一个信号
参数3:semflg 是一组标志,其作用与open函数的各种标志相似,后面9位rwx|rwx|rwx权限位,其作用相当于文件的的访问权限.shmflag如果为IPC_CREAT,就表示新创建,还可以指定读写权限0777。
函数调用方式:int semid=sem_create((key_t)1003,1);
三、信号量赋值操作
int semctl(int semid, int semnum, int cmd, ...);
参数1:int semid 信号量id,也就是 封装好的sem_create()函数的返回值
参数2:int semnum 信号量数组下标,信号量唯一时,semnum=0,表示第0个位置
参数3:cmd也是一个标识符集,有很多选择,表示将要采取的操作动作。给信号量赋值时选择SETVAL
参数4:"union semun " 联合体,给联合体的元素val赋值为信号量需要的值,然后直接在semctl()函数的第4个参数位填入定义的联合体。val值一般设置为1.
函数调用方式:sem_ctl(semid,0,1);
四、信号量PV操作 类似函数,P是-1操作,V是+1操作。信号量初值为1,执行过P操作,就不能再次执行P操作,因为规定信号量的值必须正整数。类似于阻塞效果,只能等执行过V操作,才能再次执行P操作。
//改变信号量的值
int semop(int semid, struct sembuf *sops, size_t nsops);
参数1:semid:该信号量的id值
参数2:struct sembuf *sops 是一个指向结构体数值的指针
参数3:size_t nsops默认取1
函数调用方式:P操作 sem_p(semid,0);
V操作sem_v(semid,0);表示,将id=semid的信号量的第0个下标上的值执行对应操作。
到此这篇uchar num什么意思(num_chars什么意思)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/rfx/75030.html