#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#define BUFFER_SIZE 10
int buffer[BUFFER_SIZE];
int count = 0;
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond_read = PTHREAD_COND_INITIALIZER;
pthread_cond_t cond_write = PTHREAD_COND_INITIALIZER;
void *producer(void *arg) {
int data;
while (1) {
data = rand() % 100; // 写入数据
pthread_mutex_lock(&mutex); // 加锁
while (count == BUFFER_SIZE) {
pthread_cond_wait(&cond_write, &mutex); // 等待写者写入数据
}
buffer[count++] = data;
printf("Producer put %d in buffer.\n", data);
pthread_cond_signal(&cond_read); // 唤醒等待读者的条件变量
pthread_mutex_unlock(&mutex); // 解锁
}
}
void *consumer(void *arg) {
int data;
while (1) {
pthread_mutex_lock(&mutex); // 加锁
while (count == 0) {
pthread_cond_wait(&cond_read, &mutex); // 等待读者读取数据
}
data = buffer[--count];
printf("Consumer get %d from buffer.\n", data);
pthread_cond_signal(&cond_write); // 唤醒等待写者的条件变量
pthread_mutex_unlock(&mutex); // 解锁
}
}
int main() {
pthread_t producer_thread, consumer_thread;
srand(time(NULL)); // 生成随机种子
// 创建生产者和消费者线程
pthread_create(&producer_thread, NULL, producer, NULL);
pthread_create(&consumer_thread, NULL, consumer, NULL);
// 等待线程结束
pthread_join(producer_thread, NULL);
pthread_join(consumer_thread, NULL);
return 0;
}