• 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;
    }
  • 相关阅读:
    我从0开始开发了一个LDAP服务。
    C#开发中常用的小功能
    webapi swagger 报错 路由集合中已存在名为“swagger_docsswagger/docs/{apiVersion}”的路由。路由名称必须唯一
    h5 web vlc 播放rtsp流
    Docker的基础概念与在window10下的安装
    .Net Core JWT 动态设置接口与权限
    .Net Core官方的 JWT 授权验证
    IdentityServer4中文文档
    中介者模式及在NetCore中的使用MediatR来实现
    .Net Core 使用 FluentValidation
  • 原文地址:https://www.cnblogs.com/fwst/p/3716430.html
Copyright © 2020-2023  润新知