https://www.jianshu.com/p/6e72ff770244

无名信号量

只适合用于一个进程的不同线程

#include

#include

#include

#include

#include

#include

#include

#include

sem_t sem;

void *func1(void *arg)

{

sem_wait(&sem); //一直等待,直到有地方增加信号量,执行之后信号量减一

int *running = (int *)arg;

printf("thread func1 running : %d\n", *running);

pthread_exit(NULL);

}

void *func2(void *arg)

{

printf("thread func2 running.\n");

sem_post(&sem);//增加信号量,加一

pthread_exit(NULL);

}

int main(void)

{

int a = ;

sem_init(&sem, , );//初始化信号量

pthread_t thread_id[];

pthread_create(&thread_id[], NULL, func1, (void *)&a);

printf("main thread running.\n");

sleep(5);

pthread_create(&thread_id[], NULL, func2, (void *)&a);

printf("main thread still running.\n");

pthread_join(thread_id[], NULL);

pthread_join(thread_id[], NULL);

sem_destroy(&sem);//销毁信号量

return ;

}

运行结果如下:

线程1虽然先创建,但是要一直等待,直到线程2增加信号量,线程1才能继续执行

命名信号量,可以用于不同进程

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define SEM_NAME "/sem_name" //信号量的路径

sem_t *p_sem;

void *testThread(void *ptr)

{

sem_wait(p_sem);//信号量减一,信号量为0时阻塞

pthread_exit(NULL);

}

int main(void)

{

int i = ;

pthread_t pid;

int sem_val = ;

p_sem = sem_open(SEM_NAME, O_CREAT, , );//初始化信号量为5

if(p_sem == NULL)

{

printf("sem_open %s failed!\n", SEM_NAME);

sem_unlink(SEM_NAME);//解除关联

return -;

}

for(i = ; i < ; i++)

{

pthread_create(&pid, NULL, testThread, NULL);

sleep();//等待子线程执行完毕

pthread_join(pid, NULL); //信号量为0之后,子线程将会阻塞,这里也阻塞

sem_getvalue(p_sem, &sem_val);

printf("semaphore value : %d\n", sem_val);

}

sem_close(p_sem);//关闭

sem_unlink(SEM_NAME);//解除关联

return ;

}

运行结果:

Linux信号量详解

1.什么是信号量信号量是一种特殊的变量,访问具有原子性.只允许对它进行两个操作:1)等待信号量当信号量值为0时,程序等待:当信号量值大于0时,信号量减1,程序继续运行.2)发送信号量将信号量值加1. ...

Java中处理Linux信号量

为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处.LaplaceDemon/ShiJiaqi. http://www.cnblogs.com/shijiaqi1066/p/5976361. ...

Linux信号量同步共享内存实验&period;

Linux信号量同步共享内存实验. Linux信号量同步共享内存实验. 简述 程序流程 信号量和共享内存的系统函数 信号量系统函数及接口 共享内存系统函数及接口 写程序 读程序 简述 本文主要内容是自 ...

linux信号量之进程间同步

概念 linux信号量: 允许多个线程同时进入临界区,可以用于进程间的同步. 和互斥锁(mutex)的区别: 互斥锁只允许一个线程进入临界区. 所在头文件: semaphore.h 主要函数 初始化函 ...

Linux 信号量同步编程

前一篇文章概述了Linux 系统中信号量互斥编程,这篇文章正好是前一篇的姊妹篇----信号量同步.说它们是姊妹篇是因为它们都是利用了内核的信号量机制实现了进程间的通信.因为两者所解决的问题不同,因此它 ...

Linux 信号量互斥编程

所谓信号量,其实就是一个数字.内核给这个数字赋予一定的含义,让它等于不同的值时所表示的意义不同.这样就可以用它来标示某种资源是否正被使用.信号的分类其实挺多的,主要还是二值和计数器.这里讨论二值 现在 ...

&lbrack;转&rsqb; linux 信号量之SIGNAL

我们可以使用kill -l查看所有的信号量解释,但是没有看到SIGNAL 0的解释. [root@testdb~]# kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) ...

linux信号量与完成量

信号量:    是用于保护临界区的一种常用方法,它的使用和自旋锁类似.与自旋锁相同,只有得到信号量的进程才能执行 临界区的代码.但是与自旋锁不同的是,当获取不到信号量时,进程不会原地打转而是进入休眠等 ...

linux信号量&lpar;转载&rpar;

本文转载自http://blog.csdn.net/qinxiongxu/article/details/7830537 信号量一.什么是信号量信号量的使用主要是用来保护共享资源,使得资源在一个时刻只 ...

最全面的linux信号量解析

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

随机推荐

Javascript设置对象属性为&quot&semi;只读&quot&semi;

有时为了保护某些属性,让其无法被更改,我们会把他们设置为常量. 在某些语言里面,也许会用const来实现这样的功能.本文讲述如何在Javascript中实现这样的功能. 方法一: var myObje ...

Spring Trasnaction管理(1)- 线程间事务隔离

问题导读 Spring中事务是如何实现的 Spring中各个线程间是如何进行连接.事务隔离的 Spring事务配置 Spring的事务管理应该是日常开发中总会碰到的,但是Spring具体是怎么实现线程 ...

class&period;equals

public boolean equals(Object obj) 1.自身和自身应该是equals的. X.equals(x) return ture2.如果A等于B, 那么B也就等于A . X.e ...

Eclipse设置选中高亮显示(包含debug)

如果不高亮显示了:工具栏里有个黄色小笔的图标,点一下就可以了,或者alt+shift+O 设置高亮显示:

JavaBean 和 Map 之间互相转换

JavaBean 和 Map 之间互相转换 import java.beans.BeanInfo; import java.beans.IntrospectionException; import j ...

Win7窗口操作

1.使用 Aero Shake 晃动最小化打开的窗口您可以使用 Aero Shake 晃动将所有打开的窗口快速最小化,只剩下您需要使用的窗口.然后,还可以轻松还原所有窗口.操作方法如下:1. 在需要保 ...

C&num; 使用微软自带的Speech进行语音输出

1.在VS中使用微软自带的Speech进行语音播报,首先需要添加引用: 2.具体实现逻辑代码如下:

&bsol;r &bsol;n &bsol;t &bsol;n&bsol;t

[root@localhost advanced_shell_script]# cat test15.sh #!/bin/bash #!/bin/bash # echo -e# 默认情况下,echo命 ...

清理maven本地库中的lastUpdated文件

通过CMD命令窗口进入响应的文件夹下 输入指令 for /r %i in (*.lastUpdated) do del %i

【BZOJ3456】轩辕朗的城市规划 无向连通图计数 CDQ分治 FFT 多项式求逆 多项式ln

题解 分治FFT 设\(f_i\)为\(i\)个点组成的无向图个数,\(g_i\)为\(i\)个点组成的无向连通图个数 经过简单的推导(枚举\(1\)所在的连通块大小),有: \[ f_i=2^{\f ...

linux申请信号量,linux 信号量相关推荐

  1. linux申请端口,linux申请端口申请书

    <linux申请端口申请书>由会员分享,可在线阅读,更多相关<linux申请端口申请书(9页珍藏版)>请在装配图网上搜索. 1.linux申请端口申请书篇一:LINUX开启允许 ...

  2. arm linux 申请gpio,Linux GPIO 的注册与申请

    Linux GPIO 的注册与申请 Linux Kernel, GPIO, ARM 在Linux kernel代码中,经常会使用 GPIO 来作为一个特殊的信号,如作为芯片的片选信号等. GPIO 申 ...

  3. linux下清理信号量,Linux下进程间通信方式——信号量(Semaphore)

    1.信号量 信号量本质上是一个计数器(不设置全局变量是因为进程间是相互独立的,而这不一定能看到,看到也不能保证++引用计数为原子操作),用于多进程对共享数据对象的读取,它和管道有所不同,它不以传送数据 ...

  4. Linux IPC 3 之 信号量

    一 什么是信号量 二 信号量的分类 三 内核信号量 1 内核信号量的构成 2 内核信号量中的等待队列删除没有联系 3 内核信号量的相关函数 1 初始化 2 申请内核信号量所保护的资源 3 释放内核信号 ...

  5. linux 获取和释放信号量_学习Linux(39)信号量

    进程信号量基本概念 信号量与已经介绍过的 管道.FIFO以及消息列队不同,它本质上是一个计数器,用于多进程间对共享数据对象的读取,它和管道有所不同,它不以传送数据为主要目的,它主要是用来保护共享资源( ...

  6. Linux多线程的同步-----信号量和互斥锁

    前面两篇给基本概念讲过了,大家有兴趣的可以去看一下: Linux多线程_神厨小福贵!的博客-CSDN博客进程和线程的区别有哪些呢?进程是资源分配的最小单位,线程是CPU调度的最小单位进程有自己的独立地 ...

  7. linux下清理信号量,Linux下kill的信号量列表

    Linux下kill的信号量列表 kill -s SIGSTOP PID i.e. kill -s SIGSTOP PID (暂停进程) kill -s SIGCONT PID (恢复运行进程) #d ...

  8. Linux进程间通信五 Posix 信号量简介与示例

    1. 信号量简介 信号量用于进程或线程间同步,Posix信号量是一个非负整型,只有两种操作,加一(sem_post)和减一(sem_wait),如果信号量值为0,sem_wait默认阻塞. Posix ...

  9. Linux信号量之用户态信号量(Posix信号量->无名信号量)

    相关API: 1.初始化信号量 int sem_init(sem_t* sem,int pshared,unsigned int value); //pshared为信号量最多由几个进程共享.Linu ...

最新文章

  1. utf8编码中文还是乱码_zend studio 乱码
  2. 企业中的混乱:如何对云计算具有信心
  3. 九眼智能:信息安全是网络发展的关键
  4. cocos2d-x JS 开启远程代码调试
  5. 关于数据中台的深度思考与总结,20000 字不到一丢丢。。。
  6. java key值_java-必须为此操作提供PartitionKey值
  7. VTK:Utilities之DiscretizableColorTransferFunction
  8. BeetleX网关非法Url请求拦截插件
  9. SpringCloud Greenwich(四)注册中心之eureka、Zuul和 gateway网关配置
  10. 【APICloud系列|30】UILoading 模块demo源码的实现
  11. HTML期末作业-网上书城网上书店
  12. 刻不容缓!联合国加开会议讨论「如何限制杀人机器人」
  13. SQL Server (MSSQLSERVER) 启动又停止
  14. link和@import区别
  15. PyQt5 the application failed to start because no Qt platform could be initialized
  16. android多个点的圆形进度条,Android 自定义圆形进度条总结
  17. 国家二级计算机考试题库操作题素材,【2018-2019】计算机excel操作题题库,带素材-范文word版 (17页)...
  18. 追光的人 团队团队展示
  19. 金项奖入围展播 | 梦系来客,星耀有礼
  20. jpa mysql_Spring boot通过JPA访问MySQL数据库

热门文章

  1. bootstrap3- 导航条 - 慕课笔记
  2. H5开发在微信浏览器上,出现“白屏”问题
  3. VA01销售订单批导问题解决
  4. 设置echarts 的网格样式颜色
  5. 手机版邮箱究竟有什么优势?手机怎么设置邮箱?
  6. php服装商城网站毕业设计源码241505
  7. 让蔡徐坤来教你实现游戏中的帧动画(中)
  8. SuperEmper技术支持
  9. Delphi中JSON的使用
  10. 【机器学习系列】概率图模型第一讲:从概率和图的角度理解概率图模型