一个简单的多线程代码实例

#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\n");
        pthread_mutex_lock(&mutex);//
        if(i % 3 == 0) 
            pthread_cond_signal(&cond);    /*条件改变,发送信号,通知t_b进程*/
        else
            printf("thead1:%d\n",i);
        pthread_mutex_unlock(&mutex);    //解锁互斥量
        printf("Up Mutex\n");
        sleep(1);
    }
}

void *thread2(void *junk) {
    while (i <= 9) {
        printf("IN two \n");
        pthread_mutex_lock(&mutex);
        if(i%3!=0) 
            pthread_cond_wait(&cond,&mutex);    /*等待*/
        printf("thread2:%d\n",i);
        pthread_mutex_unlock(&mutex);
        printf("Down Mutex\n");
        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
*/

 

上一篇:线程同步


下一篇:linux线程