70,023
社区成员




[User:root Time:22:29:22 Path:/home/liangdong/c]$ cat src/main.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>
static int *ptr_num_of_a = NULL;
static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
static pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
void* thread_function_a(void *arg) {
int n = 10;
pthread_mutex_lock(&mutex);
ptr_num_of_a = &n;
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
pthread_mutex_lock(&mutex);
while (ptr_num_of_a) {
pthread_cond_wait(&cond, &mutex);
}
pthread_mutex_unlock(&mutex);
printf("%d\n", n);
return NULL;
}
void* thread_function_b(void *arg) {
pthread_mutex_lock(&mutex);
while (ptr_num_of_a == NULL) {
pthread_cond_wait(&cond, &mutex);
}
++ (*ptr_num_of_a);
ptr_num_of_a = NULL;
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
return NULL;
}
int main(int argc, char* const argv[]) {
pthread_t tid_a, tid_b;
pthread_create(&tid_a, NULL, thread_function_a, NULL);
pthread_create(&tid_b, NULL, thread_function_b, NULL);
pthread_join(tid_a, NULL);
pthread_join(tid_b, NULL);
return 0;
}
[User:root Time:22:29:24 Path:/home/liangdong/c]$ ./output
11