首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

Linux信号及函数

信号的概念 信号,或称信号灯,其原理是一种数据操作锁的概念,本身不具备数据交换的功能,它负责协调各个进程,保证保证两个或多个关键代码段不被并发调用,确保公共资源的合理使用。...在信号的实际应用中,是不能只定义一个信号的,而只能定义一个信号集,其中包含一组信号,同一信号集中的信号使用同一个引用ID,这样的设置是为了多个资源或同步操作的需要。...setval error"); } // get some information about the semaphore and the limit of semaphore in Linux...struct sem_undo is 1 the maximum semaphore value is 32767 now free the resource remove sem okt 参考: 《精通Linux...C编程》- 程国钢 《Linux C编程完全解密》- 闫敬 吴淑坤

2.1K30

Linux并发(POSIX信号

System-V的信号是老古董,除非万不得已,否则我们一般用POSIX信号,好用、简单、靠谱。...拓展: POSIX信号分为两种,分别是POSIX无名信号和POSIX有名信号,这两种信号比之前介绍的system-V的信号机制要简洁,虽然没有后者的应用范围那么广泛(尤其在一些老系统中,因为system-V...的信号机制要更古老一些),但是POSIX良好的设计使得他们更具吸引力。...POSIX有名信号的一般使用步骤是: 1,使用sem_open( )来创建或者打开一个有名信号。 2,使用sem_wait( )和sem_post( )来分别进行P操作和V操作。...POSIX无名信号的一般使用步骤是: 1,在这些线程都能访问到的区域定义这种变量(比如全局变量),类型是sem_t。 2,在任何线程使用它之前,用sem_init( )初始化他。

2.3K30

svn代码统计工具

StatSVN介绍 StatSVN是一个Java写的开源代码统计程序,从statCVS移植而来,能够从Subversion版本库中取得信息,然后生成描述项目开发的各种表格和图表。...比如:代码行数的时间线;针对每个开发者的代码行数;开发者的活跃程度;开发者最近所提交的;文件数量;平均文件大小;最大文件;哪个文件是修改最多次数的;目录大小;带有文件数量和代码行数的Repository...statsvn.jar svn.log local_project   运行完成后,就会在$PWD(unix下)或者%CD%(windows下)下生成对应的分析文件,在index.html文件中就有代码统计...$log_day > /dev/null 2>&1 google-chrome $log_day/index.html & } statsvn 参考推荐: statsvn统计svn中的代码...统计svn上代码的方法--使用statsvn工具 统计分析svn用户每天提交的代码数 一个基于SVN 的代码提交统计工具 StatSVN

4.2K40

Linux进程通信之信号

Linux进程通信之信号 概念(自行百度): 信号(Semaphore),有时被称为信号灯,是在多线程环境下使用的一种设施,是可以用来保证两个或多个关键代码段不被并发调用。...在进入一个关键代码段之前,线程必须获取一个信号;一旦该关键代码段完成了,那么该线程必须释放信号。其它想进入该关键代码段的线程必须等待直到第一个线程释放信号。...PV原语: 信号有两个原子操作:P操作和V操作,具体意义也要分信号类型的情况 P() : sem减1 V() : sem加1 分类(以了解的) 二进制信号(0和1) 信号集(集合数组) 为什么要使用信号...首先,接下来我们写一段代码,可以理解为多进程读写日志的情况 $file = 'demo24.txt'; $num = 0; //向文件里写数据 file_put_contents($file,$...,使用ipcs 命令查看,信号已存在 注意 使用完信号之后,要使用sem_remove函数删掉信号,否则会造成系统资源浪费

1.8K30

Linux线程编程之信号

这个小任务对于大多数读者应该来说是小菜一碟的的,可以直接来看示例代码(今后写代码编程全程在vim里面写,虽然不舒服,还是要习惯的,hh): #include #include <string.h...hello pthread jjjkj the input words is 5 jjkl;j the input words is 6 end over 注意: 这里在Linux...pthread.h>包含在程序当中,它任然会报下面这种错误: tmp/cc1fzkqp.o:在函数‘main’中: 1.c:(.text+0x52):对‘pthread_create’未定义的引用 3、下面通过代码来引进线程同步信号来实现子线程和主线程之间的通信控制...不过在这之前还是要稍微介绍一下什么是线程信号,其实这个跟进程通信有点类似——Linux进程编程----syslog的使用和进程间通信的介绍(六): a、那么什么是信号呢?...d、线程信号代码示例: #include #include #include #include <pthread.h

1.6K20

Python可以减少代码?我不信

我记不清当时给出的支持Python可以少写代码的栗子具体是什么了,它给出的是实现了某个功能,两行搞定,一行引入,一行调用。 当时看的我一脸懵逼,哇,真的耶。只用一行就可以。但稍后一想,这也太扯了吧。...你看着貌似是只调用了一行代码,但里边具体的实现不还是有的么?代码并没有减少,只不过是搬到了你看不到的地方,假象罢了。 当然,我是支持用Python可以少写代码的,但并不是刚才说的那样。...在我看来,这个问题得从语法层面来说,只有语法支持,才算真的能够减少代码。其实各个语言都有其特定的语法。就像PHP中变量直接当函数用,直接当类用,连反射都不用了。...嘿嘿 简单罗列了一些Python的语法支持,确实是不用写过多代码就能实现相关功能。 元素交换 a,b = b,a 实现两个元素值的交换,无需临时变量。

57220

Linux内核33-信号

进入某段临界代码段就会调用相关信号的P操作;如果信号的值大于0,该值会减1,进程继续执行。相反,如果信号的值等于0,该进程就会等待,直到有其它程序释放该信号。...事实上,Linux提供了两类信号: 内核使用的信号 用户态使用的信号(遵循System V IPC信号要求) 在本文中,我们集中研究内核信号,至于进程间通信使用的信号以后再分析。...虽然信号可以支持很大的count,但是在linux内核中,大部分情况下还是使用信号的一种特殊形式,也就是互斥信号(MUTEX)。...但是,从Linux内核2.6.37版本之后,上面的函数和宏已经不存在。这是为什么呢?因为大家发现在Linux内核的设计实现中通常使用互斥信号,而不会使用信号。...基于这个原因,Linux还提供了其它版本的请求信号的函数: down_trylock() 可以被中断和延时函数调用。

1.4K20

Linux内核编程--信号机制

Linux多进程访问共享资源时,需要按下列步骤进行操作: (1)检测控制这个资源的信号的值。 (2)如果信号是正数,就可以使用这个资源。进程将信号的值“减 1”,表示当前进程占用了一份资源。...六,具体的编程练习 信号编程步骤: 1.定义信号:sem_t 2.初始化信号:sem_init(sem_t *); 3.加锁:sem_wait() 4.执行业务逻辑代码 5.解锁:sem_post...)会被一号吸烟者取走 烟草和胶水(offer2)会被二号吸烟者取走 烟草和纸(offer3)会被三号吸烟者取走 本题可以看作是存在一个生产者和多个消费者的问题,同时生产者所生产的物品并不相同 C语言伪代码...while(1){ P(offer3); //等待组合三放到桌上 从桌上拿走组合三,吸烟 V(finish); //提醒供应者提供新组合 } } 具体代码实现...pthread_create(&smk_1, 0, smoker, 1); pthread_create(&smk_2, 0, smoker, 2); while(1); } Linux

2.7K30

linux 进程通信-信号(Semaphore)《Rice linux 学习开发》

而Posix信号灯(线程同步)指的是单个计数信号灯 System V 信号灯由内核维护 信号的使用规则 若信号为正,则进程可使用该资源 若信号为0,则进程阻塞等待,并将进程插入等待队列,直到该信号的值大于...0从等待队列中执行进程请求 加锁操作:如果信号量大于0,则信号-1;如果信号为0,则挂起该进程,并将这个进程插入等待队列 解锁操作:如果等待队列中有进程则唤醒该进程,让它恢复运行,否则,信号+1...信号相关函数 semget()函数:创建新的信号或取得已有的信号 semop()函数:改变信号的值,改变操作在sem_opa中,sem_opa是sumbuf结构体对象 semctl()函数:...控制信号 例程 信号例程请参考github的semaphore目录下semaphore.c。...github链接:https://github.com/RiceChen/Linux-process-communication.git,记得加个star。

1.4K20

Linux进程间通信:信号(一)

前提知识 在介绍信号之前,先来看看一些概念和一些简单的前提知识: 进程间通信的前提是让不同的进程看到同一份资源。...去访问临界资源的进程一定是由该进程对应的代码去访问的,而代码访问的区域称为临界区。 信号本质上是一个计数器,通常用来表示公共资源中资源的数量。...我们使用这个例子来转化成对信号的理解: 影厅就是一个临界区,每个座位就是一个个临界资源。也就是说这个临界区中有100个临界资源。...特别的,当信号sem等于1的时候,这意味共享资源的作为一整个资源被使用的。这种信号称为二元信号,通过互斥功能保护公共资源!...所有的进程在访问公共资源前,都必须先申请信号,而申请信号的前提,是让不同进程看到同一个信号,因此信号本身就是一个公共资源,这意味着信号必须保证自己 的安全性!

1.3K20

Linux 的进程间通信:信号

在这里首先强调一下,Linux系统中的semaphore信号和signal信号是完全不同的两个概念。我们将在其它文章中详细讲解信号signal。本文可以帮你学会: 什么是XSI信号?...但是从本质上讲,信号实际上是实现了一套可以实现类似锁功能的原语,我们不仅可以用它实现锁,还可以实现其它行为,比如经典的PV操作。 Linux环境下主要实现的信号有两种。...如果当前有进程使用sem_wait等待此信号,POSIX可以允许有两种返回,一种是返回0,另一种是返回一个负值,这个负值的绝对值就是等待进程的个数。Linux默认的实现是返回0。...POSIX共享内存所涉及到的其它方法应该也都比较简单,更详细的帮助参考相关的man手册即可,下面我们分别给出使用命名和匿名信号的两个代码例子: 命名信号使用: [zorro@zorro-pc sem...最后 希望这些内容对大家进一步深入了解Linux的信号。如果有相关问题,可以在我的微博、微信或者博客上联系我。 大家好,我是Zorro!

6.6K01

Linux】多线程 之 POSIX信号

输入 man sem_destroy 对已经初始化的信号进行销毁 sem_wait ——申请信号 输入 man sem_wait 进行申请信号的操作,使信号的值减1 sem_post...——释放信号 输入 man sem_post 进行释放信号的操作,使信号的值加1 4....sem_data,其初始值为0 P(sem_data) —— 申请数据信号 消费者把数据拿走,当前空间就被闲置出来了,所以生产者可以放数据 V(sem_room) ——空间信号的值+1 代码 代码解析...) 析构 由于在构造时,对信号进行初始化,所以需要销毁信号 push ——生产 要生产之前要保证符合条件,才能够进行生产,所以要进行P操作——申请信号 在使用信号时,是不需要判断的 因为信号是一把计数器...sem_post借助 函数 P和V完成封装 再次使用时,只需调用P V即可实现 pop ——消费 不断进行P操作,将数据从空间上拿走,空间都闲置出来了 就需要生产者进行生产(V操作),在空间上放置数据 代码实现

29350
领券