diff --git a/examples/dining_philosophers/dining_philosophers_initial.pseudo b/examples/dining_philosophers/dining_philosophers_initial.pseudo new file mode 100644 index 0000000000000000000000000000000000000000..0f2b0759fbe582e1bbe0f077d97c5913aa380d3a --- /dev/null +++ b/examples/dining_philosophers/dining_philosophers_initial.pseudo @@ -0,0 +1,34 @@ +procedure main(argc, argv[]): + shared chopsticks[] := create_semaphores(5, 1) + + for id := 0 to 5 do + create_thread(philosopher, id) + end for +end procedure + +procedure philosopher(id): + while true do + think() + get_left_chopstick(id) + get_right_chopstick(id) + eat() + put_left_chopstick(id) + put_right_chopstick(id) + end while +end procedure + +procedure get_left_chopstick(id): + wait(chopsticks[(id + 1) mod 5]) +end procedure + +procedure get_right_chopstick(id): + wait(chopsticks[id]) +end procedure + +procedure put_left_chopstick(id): + signal(chopsticks[(id + 1) mod 5]) +end procedure + +procedure put_right_chopstick(id): + signal(chopsticks[id]) +end procedure