zoukankan      html  css  js  c++  java
  • linux pthread多线程编程模板

    pthread_create() 创建线程,pthread_join()让线程一直运行下去。

    链接时要加上-lpthread选项。

    pthread_create中, 第三个参数为线程函数,定义如下:

      void * heartbeat_thread()

      {

        ...

      }

    下面是main.c :

    #include <pthread.h>
    
    pthread_t thread[MAX_THREAD_NUM];
    pthread_mutex_t cache_mutex;
    pthread_mutex_t variable_mutex;
    pthread_mutex_t time_mutex;
    pthread_mutex_t msg_mutex;
    
    void thread_create(void)
    {
        int temp;
        memset(thread, 0, sizeof(pthread_t) * MAX_THREAD_NUM);
        if((temp = pthread_create(&thread[0], NULL, heartbeat_thread, NULL)) != 0)
            printf("heartbeat thread create failed
    ");
        if((temp = pthread_create(&thread[1], NULL, timesync_thread, NULL)) != 0)
            printf("tiemsync thread create failed
    ");
        if((temp = pthread_create(&thread[2], NULL, udpclient_thread, NULL)) != 0)
            printf("udpclient thread create failed
    ");
        if((temp = pthread_create(&thread[3], NULL, udpserver_thread, NULL)) != 0)
            printf("udpserver thread create failed
    ");
        if((temp = pthread_create(&thread[4], NULL, msgdisplay_thread, NULL)) != 0)
            printf("msgdisplay thread create failed
    ");
    }
    
    void thread_wait(void)
    {
        if(thread[0] !=0)
        {
          pthread_join(thread[0],NULL);
          printf("heartbeat thread finish
    ");
        }
        if(thread[1] !=0)
        {
            pthread_join(thread[1],NULL);
            printf("tiemsync thread finish
    ");
        }
        if(thread[2] !=0)
        {
            pthread_join(thread[2],NULL);
            printf("udpclient thread finish
    ");
        }
        if(thread[3] !=0)
        {
            pthread_join(thread[3],NULL);
            printf("udpserver thread finish
    ");
        }
        if(thread[4] !=0)
        {
            pthread_join(thread[4],NULL);
            printf("msgdisplay thread finish
    ");
        }
    }
    
    int main(void)
    {
        pthread_mutex_init(&cache_mutex,NULL);
        pthread_mutex_init(&variable_mutex,NULL);
        pthread_mutex_init(&time_mutex,NULL);
        pthread_mutex_init(&msg_mutex,NULL);
        
        thread_create();
        thread_wait();
        
        pthread_mutex_destroy(&msg_mutex);
        pthread_mutex_destroy(&time_mutex);
        pthread_mutex_destroy(&variable_mutex);
        pthread_mutex_destroy(&cache_mutex);
        return 0;
    }
  • 相关阅读:
    TouTiao开源项目 分析笔记7 加载数据的过程
    字符串到-->list到-->字典的转变
    使用golang插入mysql性能提升经验
    linux存储管理之逻辑卷
    三、软件设计原则
    二、uml图-->主要是类图的讲解
    一、设计模式概述
    函数申明和函数表达式
    GCD
    推荐系统(Recommendation System)
  • 原文地址:https://www.cnblogs.com/fwst/p/3716430.html
Copyright © 2011-2022 走看看