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
  • 相关阅读:
    20200302 数据分析之numpy以及Jupyter
    20200228 scrapy高级使用及分布式
    20200226 请求库selenium
    20200224 爬虫-requests模块
    0219 请求上下文解析与g对象
    Matlab矩阵求导和求梯度有什么不同
    矩阵中范数的处理方式
    如何巧妙地使用递归
    遗传算法求最短路径
    nparray的维度和取值方式
  • 原文地址:https://www.cnblogs.com/helloweworld/p/3085406.html
Copyright © 2011-2022 走看看