2025年uchar num什么意思(num_chars什么意思)

uchar num什么意思(num_chars什么意思)如果项目组之间需要紧密合作 那就需要共享内存 这样就像把两个项目组放在一个会议室一起沟通 会非常高效 有了共享内存机制之后 两个进程就可以像访问自己内存中的变量一样 访问共享内存的变量 但是同时问题也来了 当两个进程共享内存了 就会存在同时读写问题 这就需要对共享内存进行保护 这需要信号量这样的同步机制 nbsp 一 导入头文件 include lt sys types

大家好,我是讯享网,很高兴认识大家。



  • 如果项目组之间需要紧密合作,那就需要共享内存,这样就像把两个项目组放在一个会议室一起沟通,会非常高效
  • 有了共享内存机制之后,两个进程就可以像访问自己内存中的变量一样,访问共享内存的变量。但是同时问题也来了,当两个进程共享内存了,就会存在同时读写问题,这就需要对共享内存进行保护,这需要信号量这样的同步机制

CreateSemaphore 获得信号量计数_信号量
讯享网

 

一、导入头文件

#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>

 二、创建或访问信号量数组   内存中没有该信号量时,创建,如果内存中有该信号量则直接访问

CreateSemaphore 获得信号量计数_函数调用_02

int semget(key_t key, int nsems, int sem***);

参数1:key 一个正整数,信号量的键值,不同的进程将通过这个值访问到同一个信号量

参数2:nsems 信号量是一个数组,nsems是数组长度,表示需要使用的信号量个数,通常取1,表示一个信号

参数3:sem*** 是一组标志,其作用与open函数的各种标志相似,后面9位rwx|rwx|rwx权限位,其作用相当于文件的的访问权限.shmflag如果为IPC_CREAT,就表示新创建,还可以指定读写权限0777。

函数调用方式:int semid=sem_create((key_t)1003,1);

 

三、信号量赋值操作

CreateSemaphore 获得信号量计数_函数调用_03

 

int semctl(int semid, int semnum, int cmd, …);

CreateSemaphore 获得信号量计数_函数调用_04

 

CreateSemaphore 获得信号量计数_函数调用_05

 

 参数1:int semid 信号量id,也就是 封装好的sem_create()函数的返回值

参数2:int semnum 信号量数组下标,信号量唯一时,semnum=0,表示第0个位置

参数3:cmd也是一个标识符集,有很多选择,表示将要采取的操作动作。给信号量赋值时选择SETVAL

CreateSemaphore 获得信号量计数_信号量_06

 

 参数4:”union semun “ 联合体,给联合体的元素val赋值为信号量需要的值,然后直接在semctl()函数的第4个参数位填入定义的联合体。val值一般设置为1.

函数调用方式:sem_ctl(semid,0,1);

四、信号量PV操作 类似函数,P是-1操作,V是+1操作。信号量初值为1,执行过P操作,就不能再次执行P操作,因为规定信号量的值必须正整数。类似于阻塞效果,只能等执行过V操作,才能再次执行P操作。

CreateSemaphore 获得信号量计数_共享内存_07

 

 

//改变信号量的值

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个下标上的值执行对应操作。

 

小讯
上一篇 2025-05-11 15:53
下一篇 2025-04-14 20:55

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/156656.html