[REBOL] Concurrent access to data file
From: coussement:c:itc:mil:be at: 19-Feb-2001 10:39
Hi REBOLians:
I'm confronted with a little but important problem...
I'm using a block structure for storing data on a server.
40 PC's -soon 80- could potentialy dump their data on the same time into one
single data file on the server.
Because we using Win NT -which I do not trust for reability-, I use a system
of token to insure concurrent access to the file:
<snip>
forever [
either all [(count<= 20) token?] [
count: count + 1
;--- attempt to reserve token
if error? err: try [write token-file now (true)][
disarm err
return false
]
wait 5 ;--- take delay to be sure token is written
;--- try write operations
answers: load local-file
either error? err: try [save remote-file append load
remote-file answers (true)][
;--- release token
delete token-file
disarm err
return false
][
;--- release token
delete token-file
delete local-file
return true
]
][
return false
]
]
token?: func [][
return not exists? rejoin [global-answer-path global-token]
]
</snip>
The token is just a text file in this case, and gives the PC the right to
talk
to the server.
The proc checks for the existence of a token on the server, for a maximum of
20 times. If there's no token on the server, it writes its own one, dump the
data and release the token.
Empirically, I had to set a delay of 5 sec to ensure the token is written,
because of the slow network connection.
Well, my question is not about straight REBOL, but more a matter of
methodology :
The procedure works, but, as you can imagine, it is not very efficient for
so many PC working and dumping together.
How can I achieve a better performence regarding concurrent access in REBOL
on WinNT, which can garanty me no data will be lost ?
Best regard,
chr==