benchmarks/Threadring.st
changeset 2353 fa7400d022a0
child 2380 9195eccdcbd9
child 2396 fadc6d7a2f5b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/benchmarks/Threadring.st	Sat Feb 16 19:08:45 2013 +0100
@@ -0,0 +1,99 @@
+"{ Package: 'stx:libjava/benchmarks' }"
+
+JavaBenchmark subclass:#Threadring
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Benchmarks-Java-Micro'
+!
+
+Object subclass:#Thread
+	instanceVariableNames:'name nextThread token semaphore done'
+	classVariableNames:''
+	poolDictionaries:''
+	privateIn:Threadring
+!
+
+
+!Threadring methodsFor:'benchmarking'!
+
+threadRing: aSemaphore
+   | first last |
+   503 to: 1 by: -1 do: [:i| 
+      first := Thread named: i next: first done: aSemaphore.
+      last isNil ifTrue: [ last := first ].
+   ].
+   last nextThread: first.
+   ^first 
+! !
+
+!Threadring methodsFor:'running'!
+
+runBenchmarkS:n 
+    ^ 'N/A'
+
+    "Created: / 31-10-2012 / 10:22:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!Threadring::Thread class methodsFor:'instance creation'!
+
+named: anInteger next: aThread done: aSemaphore
+   ^self new name: anInteger; nextThread: aThread; done: aSemaphore; fork 
+!
+
+new
+   ^self basicNew semaphore: Semaphore new 
+! !
+
+!Threadring::Thread methodsFor:'accessing'!
+
+done: aSemaphore
+   done := aSemaphore 
+!
+
+fork
+   [ self run ] fork 
+!
+
+name: anInteger
+   name := anInteger 
+!
+
+nextThread: aThread
+   nextThread := aThread 
+!
+
+run 
+   [ self tokenNotDone ] whileTrue: [ nextThread takeToken: token - 1 ].
+   done signal 
+!
+
+semaphore: aSemaphore
+   semaphore := aSemaphore 
+!
+
+takeToken: x
+   token := x.
+   semaphore signal 
+!
+
+tokenNotDone
+   semaphore wait.
+   ^token > 0 
+! !
+
+!Threadring class methodsFor:'documentation'!
+
+version_CVS
+    ^ '$Header: /cvs/stx/stx/libjava/benchmarks/Threadring.st,v 1.1 2013-02-16 18:08:32 vrany Exp $'
+!
+
+version_HG
+
+    ^ '$Changeset: <not expanded> $'
+!
+
+version_SVN
+    ^ '§Id::                                                                                                                        §'
+! !
+