一个线程和信号量的例子
线程中使用信号量好像和互斥差不多
//start from the very beginning,and to create greatness
//@author: Chuangwei Lin
//@E-mail:979951191@qq.com
//@brief: 一个线程和信号量的例子
#include <stdio.h>
#include <pthread.h>//线程的头文件
#include <semaphore.h>
void *producter(void *arg);//生产者
void *consumer(void *arg);//消费者
sem_t i;//信号量
int running = 1;//线程运行控制
/******************************************************
函数名:main函数
参数:
功能:多线程,信号量
*******************************************************/
int main(int argc, char const *argv[])
{
pthread_t producter_t;//生产者线程控制
pthread_t consumer_t;//消费者线程控制
sem_init(&i,0,100);//信号量初始化为100
pthread_create(&producter_t,NULL,(void*)producter,NULL);//建立生产者线程
pthread_create(&consumer_t,NULL,(void*)consumer,NULL);//建立消费者线程
usleep(1);//等待线程创建完毕
running = 0;//设置线程退出值
pthread_join(producter_t,NULL);//等待生产者线程退出
pthread_join(consumer_t,NULL);//等待消费者线程退出
sem_destroy(&i);//销毁信号量
return 0;
}
/******************************************************
函数名:void *producter(void *arg)
参数:
功能:生产者函数,使信号量i增加
*******************************************************/
void *producter(void *arg)
{
int semval = 0;//获取信号量的值
while(running)//没有设置退出时
{
usleep(1);
sem_post(&i);//信号量增加
sem_getvalue(&i,&semval);//得到信号量的值
printf("生产者:当前总数量:%d\n",semval);
}
}
/******************************************************
函数名:void *consumer(void *arg)
参数:
功能:消费者函数,使信号量i减少
*******************************************************/
void *consumer(void *arg)
{
int semval = 0;
while(running)//没有设置退出时
{
usleep(1);
sem_wait(&i);//使信号量减少
sem_getvalue(&i,&semval);//得到信号量的值
printf("消费者:当前总数量:%d\n",semval);
}
}
usleep和sleep的区别:
函数名: sleep
头文件: #include