Posted to tcl by jdc at Fri Jun 15 14:10:14 GMT 2007view pretty
package require Mk4tcl package require Thread # Delete database from previous run an re-create it. file delete test.mk mk::file open db test.mk -shared -nocommit mk::view layout db.pages { name page date:I who {changes { date:I who {diffs { from:I to:I old }} }} } # Insert some data for { set i 0 } { $i < 20 } { incr i } { mk::row append db.pages name "Page $i" page "Page data $i" date [clock seconds] who Me for { set j 0 } { $j < 10 } { incr j } { mk::row append db.pages!$i.changes date [clock seconds] who me for { set k 0 } { $k < 5 } { incr k } { mk::row append db.pages!$i.changes!$j.diffs from $j to $k old "Old text" } } mk::file commit db } # Create threads and test proc set nt 2 for { set t 0 } { $t < $nt } { incr t } { puts "Create thread $t" set tid($t) [thread::create { package require Mk4tcl thread::wait }] thread::send $tid($t) { proc put_mk { p c n } { for { set i 0 } { $i < $n } { incr i } { mk::row append db.pages name "Page $i" page "Page data $i" date [clock seconds] who Me mk::row append db.pages!$p.changes date [clock seconds] who me mk::row append db.pages!$p.changes!$c.diffs from 0 to 0 old "Old text" mk::file commit db } } } thread::send $tid($t) { proc get_mk { p c d n } { for { set i 0 } { $i < $n } { incr i } { mk::get db.pages!$p name page date who mk::get db.pages!$p.changes!$c date who mk::get db.pages!$p.changes!$c.diffs!$d from to old } } } } # Run tests thread::send -async $tid(0) "put_mk 2 2 10000" result thread::send -async $tid(1) "put_mk 3 3 10000" result # Wait... puts "waiting..." for {set i 0} {$i < $nt} {incr i} { vwait result } puts "Done" exit