Created
February 28, 2013 05:56
-
-
Save sonygod/5054556 to your computer and use it in GitHub Desktop.
多线程演示3:共享obj
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package ; | |
import neko.vm.Thread; | |
import neko.vm.Deque; | |
import neko.vm.Mutex; | |
/** | |
* ... | |
* @author sonygod VKT | |
* | |
* 多线程演示 3 | |
*/ | |
class Obj | |
{ | |
public var m:Mutex; | |
@:isVar | |
public var val(get,set):Int; | |
public function new() | |
{ | |
m = new Mutex(); | |
val = 0; | |
} | |
private function get_val() | |
{ | |
m.acquire(); | |
var ret = val; | |
m.release(); | |
return ret; | |
} | |
private function set_val(v:Int) | |
{ | |
m.acquire(); | |
val = v; | |
m.release(); | |
return v; | |
} | |
} | |
class TestThread | |
{ | |
var testShareNo :Int= 9999; | |
public function new() | |
{ | |
var thread1 = Thread.create(thread1Call); | |
var thread2 = Thread.create(thread2Call); | |
thread1.sendMessage(Thread.current()); | |
thread1.sendMessage(thread2); | |
thread2.sendMessage(Thread.current()); | |
var obj = new Deque<Int>(); | |
var thread3 = Thread.create(thread3Call); | |
var thread4 = Thread.create(thread4Call); | |
thread3.sendMessage(Thread.current()); | |
thread3.sendMessage(thread4); | |
thread3.sendMessage(obj); | |
thread4.sendMessage(Thread.current()); | |
thread4.sendMessage(obj); | |
var obj2 = new Obj(); | |
thread3.sendMessage(obj2); | |
thread4.sendMessage(obj2); | |
Thread.readMessage(true); | |
Thread.readMessage(true); | |
Thread.readMessage(true); | |
Thread.readMessage(true); | |
trace("finish" + testShareNo); | |
Thread.readMessage(true); | |
} | |
function thread1Call():Void { | |
var main :Thread= Thread.readMessage(true); | |
var thread2 :Thread= Thread.readMessage(true); | |
trace("thread1 got it "); | |
for (ii in 0...100) { | |
thread2.sendMessage("sum" + ii); | |
testShareNo++; | |
Sys.sleep(1 / 100); | |
} | |
main.sendMessage("done"); | |
} | |
function thread2Call():Void { | |
var main :Thread = Thread.readMessage(true); | |
trace("thread2 got it "); | |
for (ii in 0...100) { | |
trace("thread2--"+Thread.readMessage(true)); | |
} | |
main.sendMessage("done"); | |
} | |
function thread3Call():Void{ | |
var main :Thread= Thread.readMessage(true); | |
var thread4 :Thread = Thread.readMessage(true); | |
var obj:Deque<Int> = Thread.readMessage(true); | |
var obj2:Obj = Thread.readMessage(true); | |
trace("thread3 got it "+obj); | |
for (ii in 0...100) { | |
thread4.sendMessage("sum" + ii); | |
testShareNo++; | |
obj.push(ii); | |
obj2.val = ii; | |
Sys.sleep(1 / 100); | |
} | |
thread4.sendMessage("ok"); | |
main.sendMessage("done"); | |
} | |
function thread4Call():Void{ | |
var main :Thread = Thread.readMessage(true); | |
var obj:Deque<Int> = Thread.readMessage(true); | |
var obj2:Obj = Thread.readMessage(true); | |
trace("thread4 got it "); | |
for (ii in 0...100) { | |
trace("thread4--" + Thread.readMessage(true)); | |
trace("t4 got: " + obj.pop(true)); | |
trace("t4 obj2" + obj2.val); | |
} | |
trace(Thread.readMessage(true)); | |
//trace("thread4-pop" + Thread.readMessage(true).pop()); | |
main.sendMessage("done"); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment