当前位置: 首页 > article >正文

信号量和互斥量 在linux下的API是什么?

在 Linux 中,信号量(Semaphore)和互斥量(Mutex)的 API 主要分为 POSIX 标准接口和 System V 接口。以下是它们的详细 API:

互斥量(Mutex)API

互斥量主要用于线程间的同步,其 API 主要基于 POSIX 线程库(pthread)。以下是常用的互斥量 API:

初始化互斥量
  • pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr):初始化互斥量。

  • pthread_mutex_destroy(pthread_mutex_t *mutex):销毁互斥量。

锁操作
  • pthread_mutex_lock(pthread_mutex_t *mutex):加锁,阻塞直到获取锁。

  • pthread_mutex_trylock(pthread_mutex_t *mutex):尝试加锁,若锁已被占用则立即返回。

  • pthread_mutex_unlock(pthread_mutex_t *mutex):解锁。

信号量(Semaphore)API

信号量分为有名信号量和无名信号量,分别用于进程间同步和线程间同步。

POSIX 信号量 API
  • 有名信号量

    • sem_t *sem_open(const char *name, int oflag, mode_t mode, unsigned int value):创建或打开一个有名信号量。

    • int sem_close(sem_t *sem):关闭信号量。

    • int sem_unlink(const char *name):删除信号量。

  • 无名信号量

    • int sem_init(sem_t *sem, int pshared, unsigned int value):初始化无名信号量。

    • int sem_destroy(sem_t *sem):销毁无名信号量。

信号量操作
  • int sem_wait(sem_t *sem):P 操作,等待信号量值大于 0 并将其减 1。

  • int sem_trywait(sem_t *sem):尝试 P 操作,若信号量值为 0 则立即返回。

  • int sem_post(sem_t *sem):V 操作,增加信号量值。

System V 信号量 API

System V 信号量主要用于进程间同步,其 API 包括:

  • int semget(key_t key, int nsems, int semflg):创建或获取一个信号量集。

  • int semop(int semid, struct sembuf *sops, size_t nsops):对信号量执行 P 或 V 操作。

  • int semctl(int semid, int semnum, int cmd, ...):控制信号量集的属性,如删除信号量集。

总结

  • 互斥量:主要用于线程同步,通过 pthread_mutex_* 系列函数操作。

  • 信号量:用于线程或进程同步,POSIX 信号量通过 sem_* 系列函数操作,System V 信号量通过 semgetsemopsemctl 操作。


http://www.kler.cn/a/571007.html

相关文章:

  • 几道考研数学题求解
  • 清影2.0(AI视频生成)技术浅析(六):多模态融合与智能推荐
  • PL0 虚拟机
  • 【MySQL】【已解决】Windows安装MySQL8.0时的报错解决方案
  • 基于coze+微信小程序的ai对话
  • Libgdx游戏开发系列教程(2)——接水滴游戏实现
  • 23种设计模式之《责任链模式(Chain of Responsibility)》在c#中的应用及理解
  • 自动计算相机pose,pyrender渲染例子
  • MIPI接口:(4)MIPI CSI-2协议详解(上)
  • JavaWeb5、Maven
  • mssql2008与mssql2014绿色版数据库软件,免安装,下载解压就可以使用
  • 计算机网络基础:服务器远程连接管理(Telnet命令)
  • How to use VRX on ubuntu20.04 with ROS1 Noetic?[2]
  • jenkins集成docker发布java项目
  • 各种类型网络安全竞赛有哪些 网络安全大赛的简称
  • 智能家居的二次进化:当三维设计遇见场景芯片
  • Spring +Spirng MVC+Mybatis +SpringBoot
  • 一个易用的.Net测试模拟库
  • Hive面试:行列转换
  • C# Unity 唐老狮 No.3 模拟面试题