[toc]
信号量
由于独占资源的存在
PV操作即可
p 当前信号量不为零就减一然后进行运算 如果为零就阻塞
V 当前信号量加一 如果小于0就唤醒其他
- int semct1(int sem_id,int sem_num ,int command) :
- int semget(key_t key, int num_sems,int sem_flags):”创建一个新的信号量或取得一个已经建过的信号量的键 参数:key_t key(整数值,不相干的进程通过key可以访问同一个信号量,)
- 信号量的访问都是间接的,系统提供一个键,然后有系统生成一个相应的信号量标识符,
- 只有semget函数使用键返回获取信号量标识符,其他函数都是使用get返回的信号标识符
- int semop(): 用于改变信号量的值,
共享内存
允许两个不相关的进程访问同一个逻辑内存,共享内存是在两个正在运行的进程之间传递数据的一种有效方式,直接访问内存. 速度肯定十分快;
- 共享内存是IPC为进程创建的一种特殊的地址范围,它将出现在该进程的地址空间中,其他进程可以将同一段共享内存连接到它们自己的地址空间中.
- 没有同步机制但是修改对任何进程可见
-
int shmget(key_t t,size_t size(共享内存的大小), int shmfig(控制符)); 和信号量相同 要提供一个key,返回一个共享内存标识符; 创建共享内存
- IPC_CREAT
- shmat (int shm_id(共享内存标识符) , const *shm_addr(当前的地址位置) , int shmfig)启用对共享内存的访问
- shmdt 让这个共享内存在当前进程中不可使用了
- shmctl :
消息队列
消息队列是独立于进程存在的,是发送数据块的有效方式,但数据块大小和队列长度有限制,会出异常.
– int msggset()创建队列,提供键key命名队列,返回队列标识符
– int msgsnd()发送消息,
– msgrcv() 接受消息
-msgctl控制
发表回复