(一)运行结果
(二)代码
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<pthread.h>
#define COUNT 15
static int i = 0;
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t even = PTHREAD_COND_INITIALIZER;
pthread_cond_t uneven = PTHREAD_COND_INITIALIZER;
void* thread_one(void *arg)
{
while(i <= COUNT){
pthread_mutex_lock(&mutex);
if(i % 2 != 0){
printf("pthread 1 : %d\n",i);
++i;
pthread_cond_signal(&uneven);
}
else {
pthread_cond_wait(&even, &mutex);
}
pthread_mutex_unlock(&mutex);
}
}
void* thread_two(void *arg)
{
while(i <= COUNT){
pthread_mutex_lock(&mutex);
if(i % 2 == 0){
printf("pthread 2 : %d\n",i);
++i;
pthread_cond_signal(&even);
}
else{
pthread_cond_wait(&uneven, &mutex);
}
pthread_mutex_unlock(&mutex);
}
}
int main(){
pthread_t tid1, tid2;
pthread_create(&tid1, NULL, thread_one, NULL);
pthread_create(&tid2, NULL, thread_two, NULL);
pthread_join(tid1, NULL);
pthread_join(tid2, NULL);
return 0;
}
(三)编译及运行
编译
gcc file.c -o file.out -lpthread
注意这个的文件的文件名名字是file.c, 同事也可以用下面的编译方法
gcc file.c -lpthread
用这种方法编译,默认的可执行文件的名字是a.out
运行
第一种编译的运行
./file.out
第二种编译的运行
./a.out