Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rdemeter
GitHub Repository: rdemeter/so
Path: blob/master/lab9/prodcons.c
221 views
1
#include <stdio.h>
2
#include <stdlib.h>
3
#include <unistd.h>
4
#include <time.h>
5
#include <pthread.h>
6
#include <semaphore.h>
7
8
#define NUM_TOTAL_BUFFERS 5
9
#define DATA_LENGTH 20
10
11
char buffers[NUM_TOTAL_BUFFERS];
12
13
void *producer()
14
{
15
int i, writePt = 0;
16
char data;
17
for(i=0; i < DATA_LENGTH; i++)
18
{
19
data = 'A' + rand() % 25;
20
buffers[writePt] = data;
21
printf("producer: buffer[%d]=%c\n", writePt, data);
22
writePt = (writePt + 1) % NUM_TOTAL_BUFFERS;
23
}
24
}
25
26
void* consumer()
27
{
28
int i, readPt = 0;
29
char data;
30
for(i=0; i < DATA_LENGTH; i++)
31
{
32
data = buffers[readPt];
33
printf("\t\tconsumer: buffer[%d]=%c\n", readPt, data);
34
readPt = (readPt + 1) % NUM_TOTAL_BUFFERS;
35
}
36
}
37
38
int main(void) {
39
pthread_t prod, cons;
40
pthread_create(&prod, NULL, producer, NULL);
41
pthread_create(&cons, NULL, consumer, NULL);
42
43
pthread_join(prod, NULL);
44
pthread_join(cons, NULL);
45
46
printf("done!\n");
47
return 0;
48
}
49
50