0
点赞
收藏
分享

微信扫一扫

线程信号量

两岁时就很帅 2022-04-13 阅读 62
多线程c++

信号量的创建和销毁 

信号量的加减操作 

示例代码

//线程信号量
#include <cstdio>
#include<iostream>
#include<pthread.h>
#include<semaphore.h>
using namespace std;

//定义两个线程信号量
sem_t sem1;
sem_t sem2;

//a线程的线程运行函数
void* a_fn(void *arg)
{
    sem_wait(&sem1);

    cout<<"thread a running"<<endl;
    return (void*)0;
}

//b线程的线程运行函数
void* b_fn(void* arg)
{
    sem_wait(&sem2);
    cout<<"thread b running"<<endl;
    //释放线程a(对线程信号量sem1作加1操作,让阻塞的线程a继续运行)
    sem_post(&sem1);
    return (void*)0;
}

//c线程的线程运行函数
void* c_fn(void* arg)
{
    cout<<"thread c running"<<endl;
    //释放线程b(对线程信号量sem2作加1操作,让阻塞的线程b运行)
    sem_post(&sem2);
    return (void*)0;
}
 
int main()
{
    pthread_t a,b,c;

    //线程信号量的初始化,初始值为0
    sem_init(&sem1,0,0);
    sem_init(&sem2,0,0);

    int err;
    //线程创建
    err=pthread_create(&a,NULL,a_fn,(void*)0);
    if(err!=0)
    {
        perror("create error");
    }
    err=pthread_create(&b,NULL,b_fn,(void*)0);
    if(err!=0)
    {
        perror("create error");
    }
    err=pthread_create(&c,NULL,c_fn,(void*)0);
    if(err!=0)
    {
        perror("create error");
    }
    

    pthread_join(a,NULL);
    pthread_join(b,NULL);
    pthread_join(c,NULL);

    sem_destroy(&sem1);
    sem_destroy(&sem2);


    return 0;
}
举报

相关推荐

0 条评论