kdp20260110-2
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| kdp20260110-2 [May 13, 2026 at 18:01] – yanevskiv | kdp20260110-2 [May 14, 2026 at 11:38] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | # KDP Midterm (2026-01-10) Question 2 | ||
| + | Consider a dining table that can seat at most $N$ people ($N > 2$). A person may take some food, sit at the table (`sitAtTable()`), | ||
| + | |||
| + | ## Solution | ||
| + | ```c | ||
| + | #define N ... /* N > 2 */ | ||
| + | |||
| + | monitor Table { | ||
| + | int count = 0; | ||
| + | cond wantToSit; | ||
| + | cond wantToLeave; | ||
| + | | ||
| + | void sitAtTable() { | ||
| + | while (count == N) | ||
| + | wantToSit.wait(); | ||
| + | count += 1; | ||
| + | if (count == 1) | ||
| + | wantToLeave.wait(); | ||
| + | } | ||
| + | | ||
| + | void leaveTable() { | ||
| + | while (count == 2) | ||
| + | wantToLeave.wait(); | ||
| + | count -= 1; | ||
| + | if (count >= 2) | ||
| + | wantToLeave.signal(); | ||
| + | wantToSit.signal(); | ||
| + | } | ||
| + | } | ||
| + | ``` | ||
