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;
    }
  • 相关阅读:
    一个有关Golang Deferred Function 执行顺序的问题
    Golang闭包的坑
    Golang new() vs make()
    修改linux文件的mtime
    Golang通过反射获取结构体的标签
    rpm --qf 命令
    elasticsearch 5.1 认证过期 (your license has expired)
    Heka GeoIpDecoder 配置
    Heka 编译安装后 运行报错 panic: runtime error: cgo argument has Go pointer to Go pointer
    github.com/oschwald/maxminddb-golang 安装报错
  • 原文地址:https://www.cnblogs.com/fwst/p/3716430.html
Copyright © 2011-2022 走看看