1. 生产者1个线程
2. 消费者1个线程
3. 通过pthread_mutex_t并发控制
4. 通过pthread_cond_t wait signal
5. signal放到unlock后面
6. sleep放到unlock后面#include <stdio.h>
#include <unistd.h>
#include <pthread.h>
#define PRODUCER_SIZE 1
#define CONSUMER_SIZE 1
int products = 0;
pthread_mutex_t mutex;
pthread_cond_t cond;
void produce();
void consume();
int main() {
pthread_t producer;
pthread_t consumer;
pthread_mutex_init(&mutex, NULL);
pthread_cond_init(&cond, NULL);
pthread_create(&producer, NULL, produce, NULL);
pthread_create(&consumer, NULL, consume, NULL);
pthread_join(producer, NULL);
pthread_join(consumer, NULL);
return 0;
}
void produce(){
// sleep(2);
printf("start produce\n");
while (1) {
pthread_mutex_lock(&mutex);
products++;
printf("produce:%d start wake consum\n", products);
pthread_mutex_unlock(&mutex);
pthread_cond_signal(&cond);
sleep(1);
}
}
void consume() {
printf("start consum\n");
while (1) {
pthread_mutex_lock(&mutex);
while (products <= 0) {
printf("consum start wait cond\n");
pthread_cond_wait(&cond, &mutex);
printf("consum wake up\n");
}
if (products > 0) {
printf("consum:%d\n", products);
products --;
}
pthread_mutex_unlock(&mutex);
sleep(3);
}
}
|