一个线程和信号量的例子

来源:互联网 发布:养成游戏 知乎 编辑:程序博客网 时间:2024/05/21 17:00

线程中使用信号量好像和互斥差不多

//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

0 0