• linux c多线程编程案例


    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <pthread.h>
    #include <time.h>
    #define MAX 3
    
    int number =0;
    pthread_t id[2];
    pthread_mutex_t mut; //初始化静态互斥锁
    
    void thread1(void)
    {
        int i;
        printf("Hello,I am pthread1!\n");
        for (i=0; i<MAX; i++)
        {
            pthread_mutex_lock(&mut);  //此处上锁,保证number的唯一性
                number ++;   
                printf("Thread1:number = %d\n",number);
            pthread_mutex_unlock(&mut);
            sleep(1);  //linux c下 sleep(minute),里面变量单位是分钟
        }
        pthread_exit(NULL); //线程通过执行此函数,终止执行。返回是一个空指针类型
    }
    
    void thread2(void)
    {
        int j;
        printf("Hello,I'm pthread2\n");
        for(j=0; j<MAX; j++)
        {
            pthread_mutex_lock(&mut);
                 number ++;
                 printf("Thread2:number = %d\n",number);
            pthread_mutex_unlock(&mut);
            sleep(1);
        }
        pthread_exit(NULL);
    }
    
    void thread_create(void)
    {
        int temp;
        memset(&id, 0, sizeof(id));
    if(temp = pthread_create(&id[0], NULL, (void *)thread1, NULL)!= 0)
                              //参数:线程标识符指针 线程属性  线程运行函数起始地址  运行函数属性
                              //创建成功返回 0
            printf("Thread 1 fail to create!\n");
        else
            printf("Thread 1 created\n");
        if(temp = pthread_create(&id[1], NULL, (void *)thread2, NULL)!= 0)
            printf("Thread 2 fail to create!\n");
        else
            printf("Thread 2 created!\n");
     }   
    void thread_wait()
    {
        if(id[0] != 0)
        {
            pthread_join(id[0], NULL); //等待线程结束,使用此函数对创建的线程资源回收
            printf("Thread1 completed!\n");
        }
        if(id[1] != 0)
        {
            pthread_join(id[1], NULL);
            printf("Thread2 completed!\n");
        }
    }
    int main(void)
    {
    int i,ret1,ret2;
    pthread_mutex_init(&mut, NULL); //动态互斥锁
        printf("Main fuction,creating thread...\n");
        thread_create();
        printf("Main fuction, waiting for the pthread end!\n");
        thread_wait();
        return (0);
    }
  • 相关阅读:
    ROS2概述和实践入门
    ROS2与FastRTPSROS2与FastRTPS
    RoboWare Studio已经停更
    ubuntu20.04 Roboware安装遇到的问题
    Ubuntu16.04安装ROS2
    拥抱ROS2系列:ROS2概述和实践入门(一)
    clash for Linux安装使用
    Ubuntu 安装RoboWare
    Ubuntu 18.04 安装VSCode
    开源ImageFilter库For IOS源码发布
  • 原文地址:https://www.cnblogs.com/kaituorensheng/p/2731313.html
Copyright © 2020-2023  润新知