zoukankan      html  css  js  c++  java
  • c 多线程

    多线程
    
    MultiThreading.c 
    
    #include <pthread.h> 
    #include <stdio.h> 
    #include <sys/time.h> 
    #include <string.h> 
    
    #define MAX 10 
    pthread_t thread[2];//线程ID 
    pthread_mutex_t mut;//定义互斥锁变量 
    int number=0, i; 
    
    void *thread1(void*) 
    { 
        printf ("thread1 : I'm thread 1\n"); 
        for (i = 0; i < MAX; i++) 
        { 
            printf("thread1 : number = %d\n",number); 
            pthread_mutex_lock(&mut); //上锁,即只允许thread1使用共享资源 
            number++; 
            pthread_mutex_unlock(&mut); //解锁,其他线程可使用共享资源 
            sleep(2); 
        } 
    
        printf("thread1 :主函数在等我完成任务吗?\n"); 
        pthread_exit(NULL); 
    } 
    
    void *thread2(void*) 
    { 
            printf("thread2 : I'm thread 2\n"); 
            for (i = 0; i &lt; MAX; i++) 
            { 
                printf("thread2 : number = %d\n",number); 
                pthread_mutex_lock(&mut); 
                number++; 
                pthread_mutex_unlock(&mut); 
                sleep(3); 
            } 
    
            printf("thread2 :主函数在等我完成任务吗?\n"); 
            pthread_exit(NULL); 
    } 
    
    /*创建线程*/ 
    void thread_create(void) 
    { 
            int temp; 
            memset(&thread, 0, sizeof(thread));        
    
            if((temp = pthread_create(&thread[0], NULL, thread1, NULL)) != 0)     
                printf("线程1创建失败!\n"); 
            else 
                printf("线程1被创建\n"); 
    
            if((temp = pthread_create(&thread[1], NULL, thread2, NULL)) != 0)  
                printf("线程2创建失败"); 
            else 
                printf("线程2被创建\n"); 
    } 
    /*创建线程*/ 
    
    /*等待线程结束*/ 
    /*代码中如果没有pthread_join主线程会很快结束从而使整个进程结束,从而使创建的线程没有机会开始执行就结束了。加入pthread_join后,主线程会一直等待直到等待的线程结束自己才结束,使创建的线程有机会执行。*/ 
    void thread_wait(void) 
    { 
            if(thread[0] !=0) 
            {                  
                pthread_join(thread[0],NULL); 
                printf("线程1已经结束\n"); 
            } 
    
            if(thread[1] !=0) 
            {               
                pthread_join(thread[1],NULL); 
                printf("线程2已经结束\n"); 
            } 
    } 
    /*等待线程结束*/ 
    
    int main() 
    { 
            pthread_mutex_init(&mut,NULL);  //用默认属性初始化互斥锁 
            printf("我是主函数哦,我正在创建线程,呵呵\n"); 
    
            thread_create(); 
            printf("我是主函数哦,我正在等待线程完成任务阿,呵呵\n"); 
            thread_wait(); 
    
            return 0; 
    } 
    
     
    
    编译
    
    gcc -o MultiThreading.exe MultiThreading.c -lpthread 
    ./ MultiThreading.exe
  • 相关阅读:
    进程和程序的区别
    【Docker】5. 常用命令 — 镜像命令
    【Docker】4. 运行镜像的流程、docker工作原理
    【Docker】3. 配置阿里云镜像加速
    【Docker】2. Docker的架构介绍、安装与卸载 (CentOS 7)
    【Docker】Docker概述
    【Git】5. 远程库(GitHub)相关操作
    【Git】4. 团队内、跨团队协作机制
    【Git】3. Git重要特性-分支操作,合并冲突详解
    线性插值编写可视化代码
  • 原文地址:https://www.cnblogs.com/helloweworld/p/3085406.html
Copyright © 2011-2022 走看看