mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +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] *)
 |