Le 14/02/2012 11:22, Lukasz Sokol a écrit :
On 14/02/2012 09:48, Antonio Fortuny wrote:
System-wide solutions for Linux is the *Unix-way*, is to create a
lock-file;
Got it.
If you create one on a tmpfs mounted directory,
What do you call a "tmpfs mounted directory" ? I'm only a pascal
programmer not a system guy
Usually in /tmp, or by examining the output of 'mount'.
it will all happen in memory, hence no hard-drive storage access
will happen (unless moved to swap, but in your case it won't ever
happen) so all you need to do is check for lock file existence.
Does it mean that every process will have to create the file ? An
open-close sequence checking the IOResult would be enough ?
No, only the process that uses the resource, creates the file, that
/i think/ should be enough, others only see if file exists.
No, all launched processes will have to do their work on the shared
resource. In that way I wonder if an open on the control file with a
deny share wouldn't work. This means that the locking algorithm must
provide some kind of local loop in which a test is made with the open
file and a sleep if the open fails. Something like (in pseudo-code)
// do initializing stuff
while (not file error) and (not time elapsed) do begin
open file (no share)
if not open error then
break;
wait
Dec(max time)
continue
end;
if still file open error then begin
post an error message
exit
end;
// do whatever to do with the resource
// release clie (close it);
Also, for other examples of inter-process communication, you may
want to read about DBUS maybe ?
Once something works I prefer to keep it as simple as possible.
L.
(IMHO) There is also futex (Fast Userspace muTEX) but I don't know
much about that one; http://en.wikipedia.org/wiki/Futex
HTH. L.
--
_______________________________________________
Lazarus mailing list
[email protected]
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus
--
_______________________________________________
Lazarus mailing list
[email protected]
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus