linux应用开发-信号量互斥编程

linux应用开发-信号量互斥编程

一 相应的函数

1 创建/打开信号量集合

函数名 semget

函数原形 int semget(key_t key, int nsems, int semflg)

函数功能

获取信号量集合的标识符

当key所指的信号量不存在的时候,且semflg里包含了IPC_CREAT,就会创建一个信号量的集合

所属头文件

<sys/types.h> <sys/ipc.h> <sys/sem.h>

返回值

成功返回信号量的标识符

失败返回-1

参数说明

Key为键值,即内核数字与项目ID结合

nsems为产生信号量的个数

semflg标志,可以去IPC_CREAT

2 操作信号量

函数名 semop

函数原形 int semop(int semid, struct sembuf *sops, unsigned nsops)

函数功能

操作信号量集合里面的信号量

所属头文件

<sys/types.h><sys/ipc.h><sys/sem.h>

返回值

成功返回0

失败返回-1

参数说明

semid:要操作的信号量的标识符

sops:要操作多少个信号量

nsops:对信号量执行什么样的操作

3 产生键值

键值是文件在内核产生的数值与项目id结合的数

key = key_t ftok(char *fname, int id)

4 控制信号量

semctl(int semid, int semnum, int cmd...)

semid信号量标识符

semnum信号量编号

cmd相应的指令入GETVAL,SETVAL等等

上图为A进程,下图为B进程,两者利用信号量进行通信

时间: 2024-10-21 04:06:56

linux应用开发-信号量互斥编程的相关文章

Linux 信号量互斥编程

所谓信号量,其实就是一个数字.内核给这个数字赋予一定的含义,让它等于不同的值时所表示的意义不同.这样就可以用它来标示某种资源是否正被使用.信号的分类其实挺多的,主要还是二值和计数器.这里讨论二值 现在有个文件,有两个进程要同时访问它.进程A 要往里面写入 "Math class is cancel",进程B 要往里面写入“English test”.正常情况下这两个信息会被完整的写入文件中.但是如果进程A写到"Math class" 就暂停,接着B进程就开始写“En

linux应用开发-无名管道编程

linux应用开发-无名管道编程 一 linux进程间通信(ipc) 1 UNIX进程间通信 2 基于System V的通信 3 POSIX通信 二 七种通信方式 1 管道 一个进程在管道的尾部写入数据,另一个进程从管道的头部 读出数据.管道包括无名管道和有名管道两种,前者只能用 于父进程和子进程间的通信,后者可用于运行于同一系统中 的任意两个进程间的通信. 分类: 无名管道(pipo):用于父进程和子进程间的通信 有名管道(FIFO):用于运行于同一系统中的任意两个进程间的通信 特点: 1 管

linux应用开发-有名管道编程

linux应用开发-有名管道编程 一 有名管道 用于任意两个进程通信,有名管道又称为FIFO文件,因此我们对有名管 道的操作可以采用操作文件的方法,如使用open,read,write等. 2 特点 FIFO文件在使用上和普通文件有相似之处,但是也有不同之处: 1. 读取Fifo文件的进程只能以"RDONLY"方式打开fifo文件. 2. 写Fifo文件的进程只能以"WRONLY"方式打开fifo 3. Fifo文件里面的内容被读取后,就消失了.但是普通文件里面的内

第三季-第16课-信号量互斥编程

第16课-信号量互斥编程 16.1 公示栏问题(问题引入) 1. 问题描述 这里面我们举一个小例子.在一个班级里就有一个公示栏,A同学想写“数学课考试”,B同学想写“英语课取消”.但是有一个时间,A同学只写下了“数学课”三个字,没来得及写后面的内容就出去了,但是这个时候B同学来写下了“英语课取消”.这样让同学们看来就成了“数学课英语课取消”,给班级的其他同学造成了歧义. 这也就是我们说的同时访问一个资源,造成了,数据的混乱.若是有多个进程同时访问一个资源,同样会造成这个问题. 2. 问题程序化

linux服务器开发二(系统编程)--线程相关

线程概念 什么是线程 LWP:Light Weight Process,轻量级的进程,本质仍是进程(在Linux环境下). 进程:独立地址空间,拥有PCB. 线程:也有PCB,但没有独立的地址空间(共享). 进程与线程的区别:在于是否共享地址空间. 独居(进程). 合租(线程). Linux下: 线程:最小的执行单位. 进程:最小分配资源单位,可看成是一个线程的进程. 安装man文档 sudo apt-get install glibc-doc sudo apt-get install manp

信号量互斥编程

在程序中利用信号量互斥来解决公示板问题 背景知识 1.信号灯的概念 信号灯,又被称为信号量(semaphore),是IPC(进程间通信)的方式之一.它可以用来保证两个或多个关键代码段不被多个进程并发调用.每个信号灯都有个semval,用于记录信号灯的值.在进入一个关键代码段之前,进程必须获取一个信号量,使semval减1:一旦该关键代码段完成了,那么该进程必须释放信号量,使semval加1.其它想进入该关键代码段的进程,如果semval是0,就必须等待直到第一个进程释放信号量. 2.信号灯的用法

16.信号量互斥编程

我们先来看一个例子.就是两个进程访问同一个文件,由于线程的先后,导致内容的异常.即是数据内容的混乱. Student1.c: #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> ? void main(){ ????//open file ????int fd = 0; ????fd = open("/home/wen",O

Linux 信号量同步编程

前一篇文章概述了Linux 系统中信号量互斥编程,这篇文章正好是前一篇的姊妹篇----信号量同步.说它们是姊妹篇是因为它们都是利用了内核的信号量机制实现了进程间的通信.因为两者所解决的问题不同,因此它们使用的场景就会有所区别. 信号量互斥主要解决的问题是:进程间需要同时访问某种资源,但是它们对资源的操作会互相影响对方的操作结果,因此需要一种机制实现让进程在访问资源时能禁止其他进程访问相同的资源.而信号量同步则解决了另一个经典问题:生产者和消费者之间的协同工作问题. 首先描述一下生产者和消费者问题

linux应用开发-进程同步编程

linux应用开发-进程同步编程 一 进程同步 一组并发进程进行互相合作.互相等待,使得各进程按一定的顺序执行的过程称为进程间的同步 二 生产者消费者结合信号量 进程1生产,进程2消费,进程1生产的过程进程2等待