diff options
Diffstat (limited to 'otherlibs/threads/Tests/test1.ml')
| -rw-r--r-- | otherlibs/threads/Tests/test1.ml | 57 |
1 files changed, 0 insertions, 57 deletions
diff --git a/otherlibs/threads/Tests/test1.ml b/otherlibs/threads/Tests/test1.ml deleted file mode 100644 index 9d2cf0a5ee..0000000000 --- a/otherlibs/threads/Tests/test1.ml +++ /dev/null @@ -1,57 +0,0 @@ -(* Classic producer-consumer *) - -type 'a prodcons = - { buffer: 'a array; - lock: Mutex.t; - mutable readpos: int; - mutable writepos: int; - notempty: Condition.t; - notfull: Condition.t } - -let create size init = - { buffer = Array.create size init; - lock = Mutex.create(); - readpos = 0; - writepos = 0; - notempty = Condition.create(); - notfull = Condition.create() } - -let put p data = - Mutex.lock p.lock; - while (p.writepos + 1) mod Array.length p.buffer = p.readpos do - Condition.wait p.notfull p.lock - done; - p.buffer.(p.writepos) <- data; - p.writepos <- (p.writepos + 1) mod Array.length p.buffer; - Condition.signal p.notempty; - Mutex.unlock p.lock - -let get p = - Mutex.lock p.lock; - while p.writepos = p.readpos do - Condition.wait p.notempty p.lock - done; - let data = p.buffer.(p.readpos) in - p.readpos <- (p.readpos + 1) mod Array.length p.buffer; - Condition.signal p.notfull; - Mutex.unlock p.lock; - data - -(* Test *) - -let buff = create 20 0 - -let rec produce n = - print_int n; print_string "-->"; print_newline(); - put buff n; - if n < 10000 then produce (n+1) - -let rec consume () = - let n = get buff in - print_string "-->"; print_int n; print_newline(); - if n < 10000 then consume () - -let t1 = Thread.create produce 0 -let _ = consume () - -;; |
