linux信号量对mysql_信号量大家谈!---关于信号量集合

信号量是为了多进程对共享数据的存取,信号量并不是一个单独的非负值,其实信号量定义为一个或者多个信号量值的集合:

struct semid_ds{

struct ipc_perm                sem_perm        /*许可权控制结构*/

struct sem                *sem_base        /*指向集合中第一个信号量的地址*/

ushort                        sem_nsems        /*信号量集合中的信号量数目*/

time_t                        sem_otime;

time_t                        sem_ctime;

}

其中,struct sem的结构定义如下:

struct sem{

ushort                        semval;                /*具体的信号量的值*/

pid_t                        sempid;                /*上次操作该信号量的进程号*/

ushort                        semncnt;        /*processes awaiting semval>;currcal*/

ushort                        semzcnt;        /*processes awaiting semval=0*/

}

请教:

1。信号量定义成集合的结构,就是说:semget函数获得一个信号量ID后,得到的是一个信号量集合,

如果函数semget的参数nsems 大于1,集合中的信号量有多个,一般对一段共享内存进行同步访问,一个信号量

不就够了吗?对nsems大于1个的情况,具体的应用是什么呢?

(个人猜测:申请一个信号量,对多个共享内存进行同步控制;在调用semctl函数的时候,

参数semnum指向集合中的具体某个信号量)

2。具体到信号量的集合结构内部,如果semget(key-t key,int 5,int flag)申请到了5个信号量,

函数semop(int semid,struct sembuf semoparray[],size_t nops)中的参数semoparray是个信号量操作数组

struct sembuf{

ushort sem_num                /*具体到信号量集合中的某个信号量*/

short  sem_op                /*对该信号量的操作(负数,0,正数)*/

short  sem_flg                /*ipc_nowait,sem_undo*/

}

在unix高级编程一书中,这么定义的,但是我没有遇到过申请一个信号量集合中信号数大于1的,

有实际经验的朋友,大家来讨论!

还有就是:结构struct sem 中的semncnt 和 semzcnt变量做何解释?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值