信号量编程心得 共享内存增加、减小心得 2010.9.10

2010.9.10

1.信号量(Semaphore)是一个防止共享内存被多个进程或者同一进程的多个线程同时读、写而设置的一个信号开关。

功能类似,停车场。比如有3个车位同时有五辆汽车准备停靠。

信号量就像停车场的管理员,当他发现三个车位满员后,就会落下栏杆。让后面的汽车等待,而非进入停车场停靠。

 

 

 

2sem_t *sem_open(const char *name,  int  oflag,/* unsigned long mode, unsigned int value */);

       name:信号量名称,信号量唯一标示,为兼容性考虑,一般以/开头

       oflagO_RDWR读写方式打开

                O_CREAT如果不存在则创建

                O_EXCL如果O_CREAT同时被设置,那么信号量如果已存在,就返回失败

mode一般设置为S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH,表示共享内存的访问权限。

value:信号量初值,通常为1.

返回值:

       成功       返回句柄

       失败       返回SEM_FAILED       错误码 errorno

 

打开信号量时mode,value参数不需要

 

例子:

       创建:

              Sem_t *pCurSem = sem_open(pSemName, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR, 1);

       打开:

              pcur_sem = sem_open(pSemName, O_CREAT | O_RDWR);

 

3.每次创建、或者打开后,标志位的值默认为1。表明此时正在有人使用,务必注意:

无论你是创建、打开,使用完后都必须用sem_post来释放信号量。

否则,此信号量始终为1,即:一直有人在使用。

 

4Sem_t 结构体的头文件为: #include <semaphore.h>

 

 

 

5.要增加或者减少共享内存时,内存一旦要变化(操作)。必须重新关联(mmap),在关联前必须将之前关联给删除(munmap)

 

 

 

 

6 int ftruncate(int fd,off_t size);

       fd:shm_open得到的共享内存句柄

       size:内存大小

       返回值:成功 返回0   失败 返回-1 错误码errno

  设置共享内存大小,一般在初始时使用,增加、减少共享内存,无需对其进行设置。

只要在shm_open中将第二个size_t类型的参数,改变其值就行了。

 

 

 

 

7.无论文件操作、共享内存操作、信号量操作。理论上所有创建、打开都要在此功能完成后进行关闭或者删除。

功能可以是整体功能,和零散功能。例如创建、读、写。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值