[io进程]——线程同步(函数具体操作)

第一步:初始化信号量  sem_init

int sem_init(sem_t*sem,int pshared,unsigned int value)

参数说明:

  1. sem:指向要初始化的信号量的指针。
  2. pshared:控制信号量的共享选项。如果其值为0,则表示信号量仅在当前进程的线程之间共享;如果非零,则表示信号量可以在多个进程之间共享。
  3. value:指定信号量的初始值,即信号量资源的可用数量

返回值:

如果成功,sem_init返回0。

如果失败,返回-1,并设置errno以指示错误原因

函数是POSIX信号量操作中的一个关键函数,用于初始化一个无名信号量 

#include<stdio.h>
#include<semaphore.h>
int main
{
sem_t sem;
if(sem_init(&sem,0,1)<0)
{perror("ssem init err");return -1;}
return 0;
}

第二步:申请资源 sem_wait

int  sem_wait(sem_t *sem)

功能:申请资源

当信号量的值大于0时,表示有资源可以用,则继续执行,同时对信号量减1;当信号量的值等于0时,表示没有资源可以使用,函数阻塞。

返回值:

成功0;失败-1;

参数:sem:信号量对象

#include<stdio.h>
#include<semaphore>
int main
{
sem_t sem;
if(sem_init(&sem,0,1)<0)
{perror("sem init err");return -1;}
///申请资源
sem_wait(&sem);
printf("hello");
sem_wait(&sem);///阻塞状态
printf(“nihao”)//打印不出因为阻塞
return0;
}

 第三步:释放资源   sem_post

int sem_post(sem_t *sem)

功能:

释放资源 v操作

参数:&sem信号量

返回值:

成功返回0失败返回-1,并设置errnoEPERMEINVAL,表示信号量无效或操作失败

注意:

在使用sem_post之前必须先初始化信号量,通常通过sem_init函数进行初始化。

sem_wait(&sem);//申请资源
printf("hello\n");

sem_post(&sem);//释放资源

sem_wait(&sem);//进入阻塞状态
printf("1");
return 0;

调用sem_post时需要链接相关的库文件,否则会出现编译错误“undefined reference to `sem_post'”。  

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值