信号量的创建和销毁
信号量的加减操作
示例代码
//线程信号量
#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;
}