sem_open,计算机用语。意思是创建并初始化有名信号量或打开一个已存在的有名信号量

sem_init:初始化信号量sem_t,初始化的时候可以指定信号量的初始值,以及是否可以在多进程间共享。 sem_wait:一直阻塞等待直到信号量>0。 sem_timedwait:阻塞等待若干时间直到信号量>0。 sem_post:使信号量加1。 sem_destroy:释放信号量。

转:http://www.elecfans.com/emb/20190402898866.html

分类:内核信号量与用户信号量,用户信号量分为POXIS信号量和SYSTEMV信号量,POXIS信号量分为有名信号量和无名信号量

内核信号量:

  • #include
  • void sema_init(struct semaphore *sem, int val);
  • void init_MUTEX(struct semaphore *sem); //初始值1
  • void init_MUTEX_LOCKED(struct semaphore *sem); //初始值0
  • void down(struct semaphore *sem); //可睡眠
  • int down_interruptible(struct semaphore *sem); //可中断
  • int down_trylock(struct semaphore *sem); //m非阻塞
  • void up(struct semaphore *sem);

SYSTEMV信号量:

  • #include
  • int semget(key_t key, int nsems, int oflag);
  • int semop(int semid, struct sembuf *opsptr, size_t nops);
  • int semctl(int semid, int semum, int cmd,...);

POSIX无名信号量

  • #include
  • sem_t sem;
  • int sem_init(sem_t *sem, int pshared, unsigned int val); //pshared为0则线程间共享,pshared为1则父子进程共享
  • int sem_wait(sem_t *sem); //阻塞
  • int sem_trywait(sem_t *sem); //非阻塞
  • int sem_post(sem_t *sem);
  • int sem_destroy(sem_t *sem);
  • 进程间共享则sem必须放在共享内存区域(mmap, shm_open, shmget),父进程的全局变量、堆、栈中存储是不行的

POSIX有名信号量

  • sem_t *sem_open(const char *name, int oflag, mode_t mode, int val);
  • int sem_wait(sem_t *sem);
  • int sem_trywait(sem_t *sem);
  • int sem_post(sem_t *sem);
  • int sem_close(sem_t *sem);
  • int sem_unlink(const char *name);
  • 每个open的位置都要close和unlink,但只有最后执行的unlink生效

sem_open 信号量操作的更多相关文章

  1. sem_wait sem_post信号量操作进本函数

    sem_wait   sem_post 信号量的数据类型为结构sem_t,它本质上是一个长整型的数.函数sem_init()用来初始化一个信号量.它的原型为: extern int sem_init ...

  2. Posix信号量操作函数

    Posix信号量: 分类: Posix有名信号量:使用Posix IPC名字标识,可用于线程或进程间同步Posix基于内存的信号量:存放在共享内存区中,可用于进程或线程间的同步 sem_open(). ...

  3. c信号量操作demo

    #include <stdio.h> #include <string.h> #include <sys/ipc.h> #include <sys/sem.h ...

  4. linux环形buff模拟多线程信号量操作

    互斥锁mutex变量的值非0即1,只能用来表示两种状态下的临界资源.而信号量是与之类似的,用来表示可用资源的,区别在于,信号量可以表示多个可用资源的. --值为2的信号量也就是特殊的互斥锁了. 那么下 ...

  5. Pintos修改优先级捐赠、嵌套捐赠、锁的获得与释放、信号量及PV操作

    Pintos修改优先级捐赠.嵌套捐赠.锁的获得与释放.信号量及PV操作 原有的优先级更改的情况下面没有考虑到捐赠的情况,仅仅只是改变更改了当前线程的优先级,更别说恢复原本优先级了,所以不能通过任何有关 ...

  6. OS__信号量(semaphore)PV操作

    信号量的概念 1.信号量的类型定义 信号量(semaphore)的数据结构为记录型数据结构一个值和一个指针,指针指向等待该信号量的下一个进程.信号量的值与相应资源的使用情况有关,在操作系统中,信号量用 ...

  7. Linux学习笔记(15)-信号量

    在多线程或者多进程编程中,有一个非常需要关注的东西,那就是同步以及互斥问题. 同步是指多个进程之间的协作,而互斥是指多个进程之间,为了争夺有限的资源,而进行的竞争. 理论很高端,但经过自己几天的学习, ...

  8. Linux中信号量处理

    参考文章: http://blog.csdn.net/qinxiongxu/article/details/7830537/ 信号量一. 什么是信号量信号量的使用主要是用来保护共享资源,使得资源在一个 ...

  9. linux内核剖析(十)进程间通信之-信号量semaphore

    信号量 什么是信号量 信号量的使用主要是用来保护共享资源,使得资源在一个时刻只有一个进程(线程)所拥有. 信号量的值为正的时候,说明它空闲.所测试的线程可以锁定而使用它.若为0,说明它被占用,测试的线 ...

随机推荐

  1. 神经网络与机器学习第3版学习笔记-第1章 Rosenblatt感知器

    神经网络与机器学习第3版学习笔记 -初学者的笔记,记录花时间思考的各种疑惑 本文主要阐述该书在数学推导上一笔带过的地方.参考学习,在流畅理解书本内容的同时,还能温顾学过的数学知识,达到事半功倍的效果. ...

  2. 简单介绍shell编程四剑客之sed

    概要:分别的作用 grep:文本过滤(模式:pattern)工具,grep,egrep,fgrep,擅长过滤. sed:stream editor 文本编辑工具:(流编辑器),擅长取行.替换. awk ...

  3. linux的IO复用,select机制理解--ongoing

    一:首先需要搞清楚IO复用.阻塞的概念: Ref:  https://blog.csdn.net/u010366748/article/details/50944516 二:select机制 作为IO ...

  4. stub_status监控Nginx使用情况!

    stub_status监控Nginx使用情况! 查看nginx安装的模块! # /usr/local/nginx/sbin/nginx -V nginx version: nginx/1.8.1 bu ...

  5. Sql 第一行某列减第二行某列

    --1. 将结果插入临时表SELECT *INTO xxx FROM( SELECT TOP 1 a.FQTY,a.fseq FROM T_SAL_ORDERENTRY as a WHERE FQTY ...

  6. MapReduce的shuffle过程详解

    [学习笔记] 结果分析:shuffle的英文是洗牌,混洗的意思,洗牌就是越乱越好的意思.当在集群的情况下是这样的,假如有三个map节点和三个reduce节点,一号reduce节点的数据会来自于三个ma ...

  7. 第4章:LeetCode--链表

    2. Add Two Numbers: /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNo ...

  8. python学习-28 map函数

    1. num_1 = [10,2,3,4] def map_test(array): ret = [] for i in num_1: ret.append(i**2) # 列表里每个元素都平方 re ...

  9. 涛哥:Qt安卓-5.12环境搭建

    简介 Qt for android 环境搭建,以Windows平台 Qt5.12为基准. 因为有不少人问相关问题,所以写篇文章汇总一下. 安装Qt 需要先安装Android版的Qt. 一般在Qt的安装 ...

  10. Thrift RPC Golang、C++ Example

    Thrift RPC Example 运行 请直接使用即可,无需拉取任何依赖包. cd $GOPATH/src git clone https://github.com/hunterhug/thrif ...