zoukankan      html  css  js  c++  java
  • 一个线程和信号量的例子

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

    //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
    ",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
    ",semval);
        }
    }

    usleep和sleep的区别:
    函数名: sleep
    头文件: #include

  • 相关阅读:
    Sencha Ext JS 4开发入门教程
    用C#编程从数据库中读取图片数据导进Excel文件的方法
    所选中的要素,赋值给一个定义好的变量pCurFea
    Extjs4.0.7 tree 结构读取json文件(在框架viewport中)
    为什么使用接口编程
    对featureclass中插入和删除feature的几种方法进行了比较
    C#3.0之LINQ数据库表的映射
    c# Linq to sql 基本查询例子
    用ArcEngine的工具条添加图层要素
    ArcGIS Engine开发基础之QI
  • 原文地址:https://www.cnblogs.com/sigma0-/p/12630529.html
Copyright © 2011-2022 走看看