ProDeveloperTutorial.com

教程和编程解决方案
菜单
  • Shell脚本
  • 系统设计
  • Linux系统编程
  • 4g LTE
  • 编码问题
  • C
  • C ++
  • DSA
  • GIT

Linux系统编程:POSIX信号量

前开发者教程 2020年5月22日

在本章中,我们将学习:

1.简介

2. POSIX信号灯的工作

3. API’用于POSIX信号量

4. POSIX信号量示例

介绍:

在上一章中,我们了解了SysteV信号量。在本章中,我们将学习POSIX信号量。

POSIX信号灯的工作:

1.有两种与信号量有关的操作:等待和发布。

2. Post将使信号量计数增加1。

3.等待:如果信号量值为>0,则信号量递减1。

4.如果信号量值为0,则将阻止调用方,直到信号量值大于0,然后将其减1。

要使用POSIX信号量,请包含以下头文件:

#include <semaphore.h>

信号量声明如下:

sem_t sem;

以下是信号量中使用的一些功能

1. sem_init()

原型:int sem_init(sem_t * sem,int pshared,unsigned int 值);

它将初始化一个信号量。

信号量的初始值为“value”

2. sem_wait()

原型:int sem_wait(sem_t * sem);

此函数递减sem参数所引用的信号量。

 

3. sem_trywait()

如果信号量,sem_trywait()函数减少信号量’s的值大于零,否则该函数将简单返回。

 

4. sem_post()
sem_post()函数增加sem参数引用的信号量。

5. sem_destroy()

sem_destroy()函数销毁sem参数所引用的未命名信号量。

POSIX信号量示例:

#include <stdio.h> 
#include <pthread.h> 
#include <semaphore.h> 
#include <unistd.h> 
  
sem_t sem; 
  
void* thread(void* arg) 
{ 
    //wait 
    sem_wait(&sem); 
    printf("\nEntered critical section\n"); 
  
    //critical section 
    sleep(4); 
      
    printf("\nExiting critical section\n"); 
    sem_post(&sem); 
} 
  
  
int main() 
{ 
    sem_init(&sem, 0, 1); 
    pthread_t t1,t2; 
    pthread_create(&t1,NULL,thread,NULL); 
    sleep(2); 
    pthread_create(&t2,NULL,thread,NULL); 
    pthread_join(t1,NULL); 
    pthread_join(t2,NULL); 
    sem_destroy(&sem); 
    return 0; 
}

输出:

Entered critical section

Exiting critical section

Entered critical section

Exiting critical section

输出不是:

Entered critical section

Entered critical section

Exiting critical section

Exiting critical section

该网站上可用的教程列表:

C编程20+章C ++编程80+章
100多个编码问题数据结构和算法85+章
系统设计20+章Shell脚本编写12章
4g LTE 60+章节最常见的编码问题
5G NR 50+章Linux系统编程20+章
分享
电子邮件
鸣叫
领英
Reddit
绊倒
Pinterest的
上一篇文章
下一篇

关于作者

前开发者教程

每天我们都会讨论竞争性编程问题,请加入我们的网站:   电报频道

ProDeveloperTutorial.com

教程和编程解决方案
版权© 2020 ProDeveloperTutorial.com
从以下课程获得热门课程: 教育性的

<applet id="zYwMSRZ" class="zMDCL4Z"><thead id="AXKsYkq"><noscript class="TtnWQnn"><b id="smrg6Sb"></b></noscript></thead></applet>

        <progress class="rWxeDV3"><font id="PJB0K69" class="PVRiGHT"></font></progress>


        1. <canvas id="TOi715V"></canvas>

          • <dfn id="MiA2IGZ" class="MKE32yc"><ol class="S1Ze1gL"><li class="XHa1VHT"><samp id="bzCIceK" class="bBvYtpY"></samp></li></ol></dfn>
            <textarea id="bKJODZt" class="bemMiYR"></textarea>