Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
61
Task/Singleton/D/singleton.d
Normal file
61
Task/Singleton/D/singleton.d
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
module singleton ;
|
||||
import std.stdio ;
|
||||
import std.thread ;
|
||||
import std.random ;
|
||||
import std.c.time ;
|
||||
|
||||
class Dealer {
|
||||
private static Dealer me ;
|
||||
static Dealer Instance() {
|
||||
writefln(" Calling Dealer... ") ;
|
||||
if(me is null) // Double Checked Lock
|
||||
synchronized // this part of code can only be executed by one thread a time
|
||||
if(me is null)
|
||||
me = new Dealer ;
|
||||
return me ;
|
||||
}
|
||||
private static string[] str = ["(1)Enjoy", "(2)Rosetta", "(3)Code"] ;
|
||||
private int state ;
|
||||
private this() {
|
||||
for(int i = 0 ; i < 3 ; i++) {
|
||||
writefln("...calling Dealer... ") ;
|
||||
msleep(rand() & 2047) ;
|
||||
}
|
||||
writefln(">>Dealer is called to come in!") ;
|
||||
state = str.length - 1 ;
|
||||
}
|
||||
Dealer nextState() {
|
||||
synchronized(this) // accessed to Object _this_ is locked ... is it necessary ???
|
||||
state = (state + 1) % str.length ;
|
||||
return this ;
|
||||
}
|
||||
string toString() { return str[state] ; }
|
||||
}
|
||||
|
||||
class Coder : Thread {
|
||||
private string name_ ;
|
||||
Coder hasName(string name) { name_ = name ; return this ; }
|
||||
override int run() {
|
||||
msleep(rand() & 1023) ;
|
||||
writefln(">>%s come in.", name_) ;
|
||||
Dealer single = Dealer.Instance ;
|
||||
msleep(rand() & 1023) ;
|
||||
for(int i = 0 ; i < 3 ; i++) {
|
||||
writefln("%9s got %-s", name_, single.nextState) ;
|
||||
msleep(rand() & 1023) ;
|
||||
}
|
||||
return 0 ;
|
||||
}
|
||||
}
|
||||
|
||||
void main() {
|
||||
Coder x = new Coder ;
|
||||
Coder y = new Coder ;
|
||||
Coder z = new Coder ;
|
||||
|
||||
x.hasName("Peter").start() ;
|
||||
y.hasName("Paul").start() ;
|
||||
z.hasName("Mary").start() ;
|
||||
|
||||
x.wait ; y.wait ; z.wait ;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue