I\'m looking for mutex/semaphore/concurrency mechanism in shell script. Consider following situation: Unless \"a\" user does not close the shared file, \"b\" user should no
You can use the flock utility to lock a file / use it as a mutex.
Example:
#!/bin/sh -eu
#advanced bash stuff not needed
: >> lock #create a file if it doesn't exist
{
flock 3 #lock file by filedescriptor
echo $$ working with lock
sleep 2
echo $$ done with lock
} 3
Example usage:
./mx & ./mx & ./mx & #will run one at a time cuz of the lock
(
In reply to massimo's point:
If you don't want to hardcode a filedecriptor number (it should rarely be a problem if you aren't hardcoding 0, 1, or 2, but anyway), then in bash (but not in a POSIX only shell) you can have the system pick a fd for you with:
{
flock $fd
#...
} {fd}
)