首页 > 其他分享 >操作系统实验6之信号量的实现与应用

操作系统实验6之信号量的实现与应用

时间:2024-03-29 19:22:42浏览次数:23  
标签:include 操作系统 int 信号量 实验 sem 权限 指针

操作系统中常用信号量相关系统调用函数用法
1、sem_open:用于创建或打开一个命名的信号量。

点击查看代码
#include <semaphore.h>
sem_t *sem_open(const char *name, int oflag, mode_t mode, unsigned int value);

name:信号量的名称,必须以斜杠开头,例如/my_semaphore。
oflag:打开标志,可以为O_CREAT(创建信号量)和O_EXCL(只在信号量不存在时创建)的组合,或者为0(打开现有信号量)。
mode:信号量的访问权限,通常使用S_IRUSR | S_IWUSR表示用户可读写,并且可以通过’或|‘进行组合可选项如下:
S_IRUSR:用户(拥有者)具有读权限。
S_IWUSR:用户(拥有者)具有写权限。
S_IRGRP:组成员具有读权限。
S_IWGRP:组成员具有写权限。
S_IROTH:其他用户具有读权限。
S_IWOTH:其他用户具有写权限。
value:信号量的初始值(计数器的初始值)。
sem_open函数返回一个指向信号量的指针,可以在后续的信号量操作中使用该指针。

2、sem_close:关闭一个已经打开的信号量。

点击查看代码
#include <semaphore.h>
int sem_close(sem_t *sem);

sem:指向要关闭的信号量的指针。

3、sem_wait:等待信号量,并对其进行P(原子减一)操作。

点击查看代码
#include <semaphore.h>
int sem_wait(sem_t *sem);

sem:指向要等待的信号量的指针。
返回值为0表示成功

4、sem_post:对信号量进行V(原子加一)操作。

点击查看代码
#include <semaphore.h>
int sem_post(sem_t *sem);

sem:指向要发布的信号量的指针。

sem_post函数会将信号量的值加一。如果有其他进程正在等待该信号量,则其中一个进程将被唤醒。

5、sem_unlink:用于删除(取消关联)一个命名信号量。

点击查看代码
#include <fcntl.h>
int sem_unlink(const char *name);

返回值为0表示删除成功

特别注意:在使用以上系统调用时,编译时需要加上-pthread,以确保正确链接线程和实时库

标签:include,操作系统,int,信号量,实验,sem,权限,指针
From: https://www.cnblogs.com/starstxg/p/18085240

相关文章

  • HCIA-Datacom实验日志(四)
    4 以太网基础与VLAN配置实验4.1实验介绍4.1.1实验组网拓扑4.1.2实验背景某公司根据业务需求,需要对其二层网络进行VLAN划分。同时,VLAN10为特殊VLAN,为了保证信息安全,只有某些特殊的PC才可以通过VLAN10进行网络访问。如实验拓扑图所示,可以在S1和S2交换机上配置基于接......
  • 你问我答!手把手教学,银河麒麟桌面操作系统编译安装BIMP插件过程详解
    (引言:银河麒麟应热心用户后台提问,推出银河麒麟桌面操作系统编译安装BIMP插件详解过程详解专题。如有其它问题和需求,欢迎后台留言咨询……)1.GIMP简介GIMP是GNU图像处理程序(GNUImageManipulationProgram)的缩写。包括几乎所有图象处理所需的功能,号称Linux下的PhotoS......
  • 八臂迷宫实验(Eight-arm Maze Test,RMT)——KT-0854
    八臂迷宫实验是一种常用的行为学测试方法,用于评估动物的空间学习和记忆能力。该实验装置由八个相同的臂组成,这些臂从中心点平台放射出来,形成一个放射迷宫结构。动物在迷宫内接受训练,通过食物的驱使来探究各臂,进而记住食物在迷宫中的空间位置。这种方法不仅可以评估动物的工作记......
  • Java:实验三类的继承与派生
    第1关:什么是封装,如何使用封装编程要求根据提示,在右侧编辑器补充代码。定义一个Person类,包含姓名(name)、性别(sex)、年龄(age)等字段;定义一个Teacher类继承Person类,增加职称(pro)、部门(department)等字段;定义一个Student类继承Person类,增加学号(no)、入学时间(enter)、专业(major)等字段;定......
  • 实验一 关系数据库标准语言SQL
    第1关:创建数据库#代码开始CREATEDATABASEdemo;showdatabases;#代码结束第2关:创建表#代码开始#1.切换到demo数据库USEdemo;#2.分别创建s、p、j和spj数据表#创建s表:CREATETABLEs(snoCHAR(2),snameVARCHAR(10),statusINT,cityVA......
  • 综合实验,策略路由(BFD,NAT)
    涉及:VLANVLANIFaccesstrunkDHCPRIPOSPFACLNATBFD策略路由iproute-static[preference]LoopBack  <Huawei>system-view[Huawei]sysnameacsw[acsw]undoinfo-centerenable[acsw]vlanbatch1020[acsw]intg0/0/24[acsw-GigabitEthernet0/0/24]p......
  • 大一下第四周ACM实验课题解
    7-1ACM宣传作者杜祥军单位青岛大学LB大神想组织集训队去学校各处宣传ACM,但是大神不想让队员们走太多路,因此想写代码计算一下,到各地宣传再回到博知401的最短路径总和是多少。已知:学校一共有n个宣传点,博知401是标号为1的点。剩下n-1个点每个点各派1位队员,询问每个队员到达宣......
  • 数据结构:实验二 单链表
    一、   实验目的掌握单链表的存储结构特点掌握单链表中的各种基本运算算法设计。二、   实验内容与要求   编写一个程序exp2-2.cpp,实现单链表的各种基本运算和下面main函数中的每一步功能。初始化单链表L;依次采用尾插法插入’a’,’b’,’c’,’d’,’e’五......
  • 13_信号量
    信号量信号量的简介队列与信号量的对比二值信号量二值信号量相关API函数创建二值信号量函数释放二值信号量函数获取二值信号量函数二值信号量实验代码freertos_demo.c/**********************************************************************************......
  • 面经_操作系统
    操作系统线程和进程的区别、应用场景线程(Thread)和进程(Process)是操作系统中管理和执行任务的基本单元,它们有一些重要的区别和应用场景。线程和进程的区别:进程:进程是资源调度的最基本单位。每个进程都有自己的地址空间、内存、数据栈等,是操作系统中的资源分配单位。进程之间......