210226阶段三 systemV信号量

目录

  • 一、学习的知识点
    • 服务器
      • 前置服务器(接入服务器)
      • 后置服务器(业务处理服务器)
    • systemV信号量
  • 二、上课没有听懂或者没有理解的地方
  • 三、当天学习的收获

一、学习的知识点

  1. 线程属于POSIX线程
  2. 互斥锁、信号量属于POSIX信号量 在进程内部使用
  3. systemV信号量: semget shmget 在进程间使用
  4. 通过ipcs查看的都是systemV系列
  5. 信号量都是对一个数字进行加一减一的操作,信号量为 0 时,若进行减一,则阻塞在此,
  6. 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);
}

二、上课没有听懂或者没有理解的地方

三、当天学习的收获


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部