zoukankan      html  css  js  c++  java
  • 一个简单的多线程代码实例

    #include<pthread.h>
    #include<stdio.h>
    #include<stdlib.h>
    #include<unistd.h>
    
    pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; //初始化互斥锁
    pthread_cond_t cond = PTHREAD_COND_INITIALIZER; //初始化条件变量
    
    void *thread1(void *);
    void *thread2(void *);
    
    int i=1;    //全局变量
    
    int main(void) {
        pthread_t t_a;
        pthread_t t_b;
        pthread_create(&t_a,NULL,thread1,(void *)NULL);    //创建进程t_a
        pthread_create(&t_b,NULL,thread2,(void *)NULL); //创建进程t_b
        pthread_join(t_b, NULL);    //等待进程t_b结束
        pthread_mutex_destroy(&mutex);    
        pthread_cond_destroy(&cond);
        exit(0);
    }
    
    void *thread1(void *junk) {
        for(i = 1;i <= 9;i++) {
            printf("IN one
    ");
            pthread_mutex_lock(&mutex);//
            if(i % 3 == 0) 
                pthread_cond_signal(&cond);    /*条件改变,发送信号,通知t_b进程*/
            else
                printf("thead1:%d
    ",i);
            pthread_mutex_unlock(&mutex);    //解锁互斥量
            printf("Up Mutex
    ");
            sleep(1);
        }
    }
    
    void *thread2(void *junk) {
        while (i <= 9) {
            printf("IN two 
    ");
            pthread_mutex_lock(&mutex);
            if(i%3!=0) 
                pthread_cond_wait(&cond,&mutex);    /*等待*/
            printf("thread2:%d
    ",i);
            pthread_mutex_unlock(&mutex);
            printf("Down Mutex
    ");
            sleep(1);
        }
    }
    
    /*
    运行结果
    IN one
    thead1:1
    Up Mutex
    IN two 
    IN one
    thead1:2
    Up Mutex
    IN one
    Up Mutex
    thread2:3    
    Down Mutex
    IN one
    thead1:4
    Up Mutex
    IN two 
    IN one
    thead1:5
    Up Mutex
    IN one
    Up Mutex
    thread2:6
    Down Mutex
    IN one
    thead1:7
    Up Mutex
    IN two 
    IN one
    thead1:8
    Up Mutex
    IN one
    Up Mutex
    thread2:9
    Down Mutex
    */
  • 相关阅读:
    hdu 1142 用优先队列实现Dijkstra
    POJ 2063 Investment 完全背包
    POJ 3260 多重背包+完全背包
    bignum 大数模板
    POJ 3468(树状数组的威力)
    POJ 3468 线段树裸题
    hdu 1058 Humble Numbers
    CodeForces 185A 快速幂
    POJ 1990 MooFest 树状数组
    设计模式(20)策略模式
  • 原文地址:https://www.cnblogs.com/deepspace/p/15102326.html
Copyright © 2011-2022 走看看