信号量编程心得 共享内存增加、减小心得 2010.9.10
2010-09-10 15:24
316 查看
2010.9.10
1.信号量(Semaphore)是一个防止共享内存被多个进程或者同一进程的多个线程同时读、写而设置的一个信号开关。
功能类似,停车场。比如有3个车位同时有五辆汽车准备停靠。
信号量就像停车场的管理员,当他发现三个车位满员后,就会落下栏杆。让后面的汽车等待,而非进入停车场停靠。
2.sem_t *sem_open(const char *name, int oflag,/* unsigned long mode, unsigned int value */);
name:信号量名称,信号量唯一标示,为兼容性考虑,一般以/开头
oflag:O_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,即:一直有人在使用。
4.Sem_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.无论文件操作、共享内存操作、信号量操作。理论上所有创建、打开都要在此功能完成后进行关闭或者删除。
功能可以是整体功能,和零散功能。例如创建、读、写。
1.信号量(Semaphore)是一个防止共享内存被多个进程或者同一进程的多个线程同时读、写而设置的一个信号开关。
功能类似,停车场。比如有3个车位同时有五辆汽车准备停靠。
信号量就像停车场的管理员,当他发现三个车位满员后,就会落下栏杆。让后面的汽车等待,而非进入停车场停靠。
2.sem_t *sem_open(const char *name, int oflag,/* unsigned long mode, unsigned int value */);
name:信号量名称,信号量唯一标示,为兼容性考虑,一般以/开头
oflag:O_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,即:一直有人在使用。
4.Sem_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.无论文件操作、共享内存操作、信号量操作。理论上所有创建、打开都要在此功能完成后进行关闭或者删除。
功能可以是整体功能,和零散功能。例如创建、读、写。
相关文章推荐
- linux基础编程:进程通信之System V IPC:消息队列,信号量,共享内存
- <转>linux操作系统编程——共享内存读写(采用信号量进行同步互斥)
- 多进程编程之进程间通信-共享内存,信号量和套接字
- linux操作系统编程——共享内存读写(采用信号量进行同步互斥)
- Linux ipc------ 信号量+共享内存编程
- linux高级编程基础系列:System V进程间通信(信号量、共享内存)
- <转>linux操作系统编程——共享内存读写(采用信号量进行同步互斥)
- linux下C语言编程7-信号量与共享内存
- linux基础编程:进程通信之System V IPC:消息队列,信号量,共享内存
- 进程间通信与同步---共享内存和信号量编程简介
- 信号量、共享内存和消息队列
- 消息队列、信号量、共享内存各个函数
- 《Linux程序设计》——信号量、共享内存和消息队列
- Linux--进程间通信(信号量,共享内存)(转)
- linux c 共享内存编程学习记录
- 《第 14 章》 信号量,共享内存和消息队列
- 进程通信--信号量,共享内存
- Linux编程常用的函数(五) 共享内存
- 信号量学习 & 共享内存同步
- Linux Programing -- ch14-- 信号量、共享内存、消息队列