(12) linux 上线程进程同步的信号量 semaphore,函 sem_trywait()、sem_timedwait()、sem_getvalue(),代码举例验证信号量里的资源数是无限的

(7)函 sem_trywait()

在这里插入图片描述

(8)函数 sem_timedwait()

在这里插入图片描述

(9) 函数 sem_getvalue ()

在这里插入图片描述
在这里插入图片描述

(10)代码举例验证信号量里的资源数是无限的。这个实验,也是为了猜测 linux 内核里关于信号量的设计,可见, linux 内核只关注信号量管理的资源数量是非负整数即可以。大于0 表示共享资源是空闲的。 <= 0 表示共享资源没有了,线程或进程需要等待。 与 锁 mutex ,条件变量 condition_variable 共同完成多进程多线程的编程,资源共享、互斥与同步。

#include <stdio.h>
#include <stdlib.h>
#include <semaphore.h>
#include <unistd.h>

int main() 
{   
    sem_t semaphore ;    int num ;

    if (sem_init( &semaphore, 0, 5 ) != 0) 
    {   // 初始化信号量,只有 5 个共享资源,用于线程间同步
        perror("sem_init");        
        exit(EXIT_FAILURE);
    }

    sem_wait( &semaphore );  
    sem_getvalue( &semaphore , &num );
    printf("当前的空闲的资源数量%d\n", num); // 应该是 4

    sem_post(&semaphore); sem_post(&semaphore); sem_post(&semaphore);
    sem_getvalue( &semaphore , &num );
    printf("当前的空闲的资源数量%d\n", num); // 应该是 7

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

    return 0;
}

++ 实验结果验证了上面的结论,谢谢码农论坛老师, 码农论坛老师的信号量讲解在这里,也是编写这个测试例子的思路来源

在这里插入图片描述

(11)

谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值