Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rdemeter
GitHub Repository: rdemeter/so
Path: blob/master/lab8/mutex-test.c
221 views
1
#include <stdio.h>
2
#include <sched.h>
3
#include <stdlib.h>
4
#include <pthread.h>
5
6
pthread_mutex_t count_lock;
7
pthread_cond_t count_nonzero;
8
unsigned count;
9
10
void *decrement_count() {
11
while(1)
12
{
13
pthread_mutex_lock(&count_lock);
14
if (count == 0)
15
pthread_cond_wait(&count_nonzero, &count_lock);
16
17
count = count - 1;
18
printf("dec count=%d\n", count);
19
pthread_mutex_unlock(&count_lock);
20
}
21
}
22
23
void *increment_count() {
24
while(1)
25
{
26
pthread_mutex_lock(&count_lock);
27
count = count + 1;
28
printf("inc count=%d\n", count);
29
30
if (count > 2) {
31
printf("signal ...\n");
32
pthread_cond_signal(&count_nonzero);
33
}
34
pthread_mutex_unlock(&count_lock);
35
}
36
}
37
38
int main() {
39
pthread_t dec, inc;
40
41
pthread_create(&dec, NULL, decrement_count, NULL);
42
pthread_create(&inc, NULL, increment_count, NULL);
43
44
pthread_join(inc, NULL);
45
pthread_join(dec, NULL);
46
return 0;
47
}
48
49
50