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
    */
  • 相关阅读:
    谷歌 colab调用 Kaggle 数据集
    TensorFlow/Keras binary_crossentropy损失函数
    R语言 pivot_longer 图表变换
    R语言 ggplot2 柱状图
    R语言 ggplot2 笔记
    Bash 批量删除指定后缀的文件
    MacBook 风扇控制软件 Macs Fan Control
    R语言 dplyr selec 辅助函数
    R语言一次性更新全部packages
    R语言 glue 版本冲突
  • 原文地址:https://www.cnblogs.com/deepspace/p/15102326.html
Copyright © 2011-2022 走看看