Abstract
- In this problem, there is a Producer collaborating with Consumer to carry out a task
Sample Codes
#include <pthread.h>
pthread_cond_t cond;
pthread_mutex_t mutex;
int buffer[10];
int buffer_index = 0;
void producer() {
while (1) {
pthread_mutex_lock(&mutex);
while (buffer_index == 10) {
pthread_cond_wait(&cond, &mutex);
}
buffer[buffer_index++] = 1;
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
}
}
void consumer() {
while (1) {
pthread_mutex_lock(&mutex);
while (buffer_index == 0) {
pthread_cond_wait(&cond, &mutex);
}
buffer[buffer_index--] = 0;
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
}
}
int main() {
pthread_cond_init(&cond, NULL);
pthread_mutex_init(&mutex, NULL);
pthread_t producer_thread;
pthread_t consumer_thread;
pthread_create(&producer_thread, NULL, producer, NULL);
pthread_create(&consumer_thread, NULL, consumer, NULL);
pthread_join(producer_thread, NULL);
pthread_join(consumer_thread, NULL);
pthread_cond_destroy(&cond);
pthread_mutex_destroy(&mutex);
return 0;
}
Terminologies
Buffer
- Temporary storage area for data
Producer
Consumer