210226阶段三 systemV信号量
目录
- 一、学习的知识点
- 服务器
- 前置服务器(接入服务器)
- 后置服务器(业务处理服务器)
- systemV信号量
- 二、上课没有听懂或者没有理解的地方
- 三、当天学习的收获
一、学习的知识点
- 线程属于POSIX线程
- 互斥锁、信号量属于POSIX信号量 在进程内部使用
- systemV信号量: semget shmget 在进程间使用
- 通过ipcs查看的都是systemV系列
- 信号量都是对一个数字进行加一减一的操作,信号量为 0 时,若进行减一,则阻塞在此,
- systemV系列的P操作对信号量减1,V操作对信号量加1
服务器
根据服务器的功能分为两个进程
前置服务器(接入服务器)
接入客户端,把数据写入共享内存,通知后置服务器取数据
后置服务器(业务处理服务器)
取出数据,对数据进行处理,写入共享内存,通知前置服务器取
使用两块共享内存 两个systemV信号量 一个共享内存 存放未处理的数据,另一个共享内存存放处理后的数据。
使用两个信号量的原因是:避免后置服务器和子进程抢夺 信号量的P操作
systemV信号量
#include //man semop
#include
#include
void sem_p(int sem_id)
{struct sembuf sops = { 0,-1,0 }; //参数1 第几个sem 参数三 标志 0为默认 阻塞semop(sem_id, &sops, 1); //1 操作1个信号量
}void sem_v(int sem_id)
{struct sembuf sops = { 0,1,0 };semop(sem_id, &sops, 1);
}
int semid1 = semget(1234, 1, 0); //参数1 key 参数2 初始化的信号量个数 参数三 信号量的创建方式或权限
if (semid1 == -1)//如果打开失败 就创建
{semid1 = semget(1234, 1, IPC_CREAT | 0666);
}
二、上课没有听懂或者没有理解的地方
无
三、当天学习的收获
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
