-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathp1117.c
38 lines (33 loc) · 828 Bytes
/
p1117.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <semaphore.h>
typedef struct {
// User defined data may be declared here.
sem_t h;
sem_t o;
} H2O;
H2O* h2oCreate() {
H2O* obj = (H2O*) malloc(sizeof(H2O));
// Initialize user defined data here.
sem_init(&obj->h, 0, 0);
sem_init(&obj->o, 0, 0);
return obj;
}
void hydrogen(H2O* obj) {
sem_post(&obj->h);
sem_wait(&obj->o);
// releaseHydrogen() outputs "H". Do not change or remove this line.
releaseHydrogen();
}
void oxygen(H2O* obj) {
sem_wait(&obj->h);
sem_wait(&obj->h);
// releaseOxygen() outputs "O". Do not change or remove this line.
releaseOxygen();
sem_post(&obj->o);
sem_post(&obj->o);
}
void h2oFree(H2O* obj) {
// User defined data may be cleaned up here.
sem_destroy(&obj->h);
sem_destroy(&obj->o);
free(obj);
}