Loading ...
Sorry, an error occurred while loading the content.

Re: [nslu2-linux] Re: Lockfiles

Expand Messages
  • David Given
    ... Actually... There s a long and honoured art of using the filesystem for locking, using mkdir(2) and rmdir(2), like this: while (mkdir( /tmp/lockfile ,
    Message 1 of 4 , Mar 3, 2012
    • 0 Attachment
      On 02/03/12 22:11, rolandkbs wrote:
      > Creating a file and checking for its presence is not an atomic operation.

      Actually...

      There's a long and honoured art of using the filesystem for locking,
      using mkdir(2) and rmdir(2), like this:

      while (mkdir("/tmp/lockfile", 0700) == -1) // try to take lock
      {
      // if mkdir failed, the lock is already taken, so wait and try
      // again
      sleep(1);
      }

      // lock now taken
      ... do something ...
      rmdir("/tmp/lockfile"); // release lock

      You can even do this from shell scripts; see lockfile(1).

      Of course, named semaphores (see sem_open(3) for details) are better in
      every possible way, but there are still cases (e.g. mailboxes, or doing
      things from scripts) where the above approach is suitable.

      --
      ┌─── dg@cowlark.com ───── http://www.cowlark.com ─────

      │ "Never attribute to malice what can be adequately explained by
      │ stupidity." --- Nick Diamos (Hanlon's Razor)
    • clerew5
      ... snip ... Yes, I had not realized that semaphores would work between different processes, but that is clearly the proper way to do it. I see that there are
      Message 2 of 4 , Mar 8, 2012
      • 0 Attachment
        --- In nslu2-linux@yahoogroups.com, David Given <dg@...> wrote:
        >
        > On 02/03/12 22:11, rolandkbs wrote:
        > > Creating a file and checking for its presence is not an atomic operation.
        >
        > Actually...
        >
        > There's a long and honoured art of using the filesystem for locking,
        > using mkdir(2) and rmdir(2), like this:

        snip

        > Of course, named semaphores (see sem_open(3) for details) are better in
        > every possible way, but there are still cases (e.g. mailboxes, or doing
        > things from scripts) where the above approach is suitable.

        Yes, I had not realized that semaphores would work between different processes, but that is clearly the proper way to do it. I see that there are also messages and even shared memory facilities, which might be useful for my problem.
      Your message has been successfully submitted and would be delivered to recipients shortly.