mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 09:40:21 +00:00
72 lines
1.1 KiB
Plaintext
72 lines
1.1 KiB
Plaintext
(* ****** ****** *)
|
|
//
|
|
// HX-2013-11
|
|
//
|
|
// Implementing a variant of
|
|
// the problem of Dining Philosophers
|
|
//
|
|
(* ****** ****** *)
|
|
|
|
#include
|
|
"share/atspre_define.hats"
|
|
|
|
(* ****** ****** *)
|
|
|
|
staload "{$LIBATSHWXI}/teaching/mythread/SATS/channel.sats"
|
|
|
|
(* ****** ****** *)
|
|
|
|
%{#
|
|
#define NPHIL 5
|
|
%} // end of [%{#]
|
|
#define NPHIL 5
|
|
|
|
(* ****** ****** *)
|
|
|
|
typedef nphil = natLt(NPHIL)
|
|
|
|
(* ****** ****** *)
|
|
|
|
fun phil_left (n: nphil): nphil
|
|
fun phil_right (n: nphil): nphil
|
|
|
|
(* ****** ****** *)
|
|
//
|
|
fun phil_loop (n: nphil): void
|
|
//
|
|
(* ****** ****** *)
|
|
|
|
fun cleaner_loop ((*void*)): void
|
|
|
|
(* ****** ****** *)
|
|
|
|
absvtype fork_vtype = ptr
|
|
vtypedef fork = fork_vtype
|
|
|
|
(* ****** ****** *)
|
|
|
|
fun fork_get_num (!fork): nphil
|
|
|
|
(* ****** ****** *)
|
|
|
|
fun phil_dine
|
|
(n: nphil, lf: !fork, rf: !fork): void
|
|
// end of [phil_dine]
|
|
|
|
fun phil_think (n: nphil): void
|
|
|
|
(* ****** ****** *)
|
|
|
|
fun cleaner_wash (f: !fork): void
|
|
fun cleaner_return (f: fork): void
|
|
|
|
(* ****** ****** *)
|
|
//
|
|
fun fork_changet (n: nphil): channel(fork)
|
|
//
|
|
fun forktray_changet ((*void*)): channel(fork)
|
|
//
|
|
(* ****** ****** *)
|
|
|
|
(* end of [DiningPhil2.sats] *)
|