aboutsummaryrefslogtreecommitdiff
path: root/Semestr 2/racket/l15/kacp.bak
diff options
context:
space:
mode:
Diffstat (limited to 'Semestr 2/racket/l15/kacp.bak')
-rw-r--r--Semestr 2/racket/l15/kacp.bak55
1 files changed, 0 insertions, 55 deletions
diff --git a/Semestr 2/racket/l15/kacp.bak b/Semestr 2/racket/l15/kacp.bak
deleted file mode 100644
index ff2a2bc..0000000
--- a/Semestr 2/racket/l15/kacp.bak
+++ /dev/null
@@ -1,55 +0,0 @@
-#lang racket
-
-(define (run-concurrent . thunks)
- (define threads (map thread thunks))
- (for-each thread-wait threads))
-
-(define (random-sleep)
- (sleep (/ (random) 100)))
-
-(define (with-random-sleep proc)
- (lambda args
- (random-sleep)
- (apply proc args)))
-
-(define (make-serializer)
- (define sem (make-semaphore 1))
- (lambda (proc)
- (lambda args
- (semaphore-wait sem)
- (define ret (apply proc args))
- (semaphore-post sem)
- ret)))
-
-(define (table)
- (random-sleep)
- (define forks (list (make-semaphore 1)
- (make-semaphore 1)
- (make-semaphore 1)
- (make-semaphore 1)
- (make-semaphore 1)))
- (define (pick-fork i)
- (random-sleep)
- (semaphore-wait (list-ref forks i)))
- (define (put-fork i)
- (random-sleep)
- (semaphore-post (list-ref forks i)))
- (define (dispatch m)
- (cond [(eq? m 'pick-fork) pick-fork]
- [(eq? m 'put-fork) put-fork]
- [else (error "Unknown request -- TABLE"
- m)]))
- dispatch)
-
-(define dtable (table))
-
-(define (philosopher dining-table number)
- (define my-turn (make-serializer))
- (define (eat)
- (display number)
- (newline)
- ((dining-table 'pick-fork) number)
- ((dining-table 'put-fork) number)
- ((dining-table 'pick-fork) (modulo (+ number 1) 5))
- ((dining-table 'put-fork) (modulo (+ number 1) 5)))
- (my-turn eat)) \ No newline at end of file