summary refs log tree commit diff stats
path: root/tests/threads
diff options
context:
space:
mode:
authorEugene Kabanov <ka@hardcore.kiev.ua>2017-03-23 17:13:38 +0200
committerAndreas Rumpf <rumpf_a@web.de>2017-03-23 16:13:38 +0100
commit254fbcc548247865cf15200a200436024258e647 (patch)
treed72374034135985df44bb7fb1f12327a1cde6079 /tests/threads
parentd508303fadc65bacbf15ada83da37660f5552107 (diff)
downloadNim-254fbcc548247865cf15200a200436024258e647.tar.gz
Fixes #4719. (#5585)
Diffstat (limited to 'tests/threads')
-rw-r--r--tests/threads/tmanyjoin.nim30
-rw-r--r--tests/threads/treusetvar.nim28
2 files changed, 58 insertions, 0 deletions
diff --git a/tests/threads/tmanyjoin.nim b/tests/threads/tmanyjoin.nim
new file mode 100644
index 000000000..2c1cda494
--- /dev/null
+++ b/tests/threads/tmanyjoin.nim
@@ -0,0 +1,30 @@
+discard """
+  outputsub: "129"
+"""
+
+import os, locks
+
+type
+  MarkerObj = object
+    lock: Lock
+    counter: int
+  Marker = ptr MarkerObj
+
+const
+  ThreadsCount = 129
+  SleepTime = 1000
+
+proc worker(p: Marker) {.thread.} =
+  acquire(p.lock)
+  inc(p.counter)
+  release(p.lock)
+  sleep(SleepTime)
+
+var p = cast[Marker](allocShared0(sizeof(MarkerObj)))
+initLock(p.lock)
+var ts = newSeq[Thread[Marker]](ThreadsCount)
+for i in 0..<ts.len:
+  createThread(ts[i], worker, p)
+
+joinThreads(ts)
+echo p.counter
diff --git a/tests/threads/treusetvar.nim b/tests/threads/treusetvar.nim
new file mode 100644
index 000000000..672da6bdd
--- /dev/null
+++ b/tests/threads/treusetvar.nim
@@ -0,0 +1,28 @@
+discard """
+  outputsub: "129"
+"""
+
+import os, locks
+
+type
+  MarkerObj = object
+    lock: Lock
+    counter: int
+  Marker = ptr MarkerObj
+
+const
+  ThreadsCount = 129
+
+proc worker(p: Marker) {.thread.} =
+  acquire(p.lock)
+  inc(p.counter)
+  release(p.lock)
+
+var p = cast[Marker](allocShared0(sizeof(MarkerObj)))
+initLock(p.lock)
+
+for i in 0..(ThreadsCount - 1):
+  var thread: Thread[Marker]
+  createThread(thread, worker, p)
+  joinThread(thread)
+echo p.counter