【Linux系统】信号量(初次理解)

五个概念

  1. 多个执行流(进程),能看到的一份资源:共享资源
  2. 被保护起来的资源可以叫临界资源(同步和互斥) --- 用互斥的方式保护共享资源就叫临界资源
  3. 互斥:任何时刻只能有一个进程在访问共享资源
  4. 资源,要被程序员访问,资源被访问,朴素的认识,就是通过代码访问,所以代码 = 访问共享资源的代码(临界区) + 不访问共享资源的代码(非临界区)
  5. 所谓的对共享资源进行保护就是临界资源,本质是对访问共享资源的代码进行保护!

 

信号量理论理解

引入结论:信号量本质是一个计数器,比如count=16

讲信号量之前先引入一个故事

 我们都喜欢去电影院看电影,但是呢,电影院有vip房间,有普通房间

vip房间只供一人观看,普通房间是很多人在一起看!

看电影我们要买票,我们买一张票:本质不就是对资源的预定机制!

我们最担心的是超过资源个数的卖票!

int count = 16;

if(count>0)count--;else wait;

//购票

count++;

电影院:共享资源(临界资源)买票:申请信号量!票数:信号量的初始值!

申请信号量的本质:就是对公共资源的一种预定机制!

信号量也是共享资源,所以申请信号量流必须经过,申请信号量,访问共享内存,释放信号量

 回过头来再看,电影院的vip房间,不就是对共享资源的整体使用,其实不就是资源只有一个吗?

那里面要么没人,要么就一个人,1 or 0 ,二元信号量,当里面有人时,其他人就不能进入,这其实是互斥!

普通房间:1.先买票 2.让执行流和资源进行一一对应(程序员编码实现)

信号量本质是一个计数器!!!

申请信号量,访问共享内存,释放信号量

int count = 16;

if(count>0)count--;else wait;

//购票

count++;

申请信号量代表对计数器-- 释放信号量代表对计数器++

-- 安全的操作,我们叫P操作 ++ 安全的操作,我们叫V操作

所以就有PV操作  --- 安全的   --- 原子性

我们可以用一个全局变量gcount=25来代表信号量吗?;不能!!!

1.全局变量不能被所有进程看到。

2.gcount++,不是原子的。

怎么可以让其他进程也能看到?

IPC信号量就来了!!!-> 和共享内存,消息队列一样,也必须先让,不同的进程看到同一个“计数器”!!!这意味着信号量也是一个公共资源,保护临界资源的安全,前提是不是,你自己得是安全的!!!

信号量操作接口

semget

 key:与共享内存的key类似

nsems:运行用户一次申请多个信号量  -- 信号量集,用数组来维护

 semctl

 semop

 使用上都与共享内存相仿!!!

信号量指令

ipcs -s

ipcrm -s semid

相关推荐

  1. Linux 信号的使用

    2024-07-12 03:36:01       35 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-12 03:36:01       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-12 03:36:01       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-12 03:36:01       58 阅读
  4. Python语言-面向对象

    2024-07-12 03:36:01       69 阅读

热门阅读

  1. linux:vi命令

    2024-07-12 03:36:01       17 阅读
  2. vagrant远程连接不上问题

    2024-07-12 03:36:01       18 阅读
  3. Android Gradle开发与应用(一): Gradle基础

    2024-07-12 03:36:01       22 阅读
  4. Android Gradle 开发与应用 (八): Gradle 与持续集成(CI)

    2024-07-12 03:36:01       22 阅读
  5. 宪法学学习笔记(个人向) Part.3

    2024-07-12 03:36:01       18 阅读
  6. 【Unity】RPG2D龙城纷争(十)战斗系统之角色战斗

    2024-07-12 03:36:01       22 阅读