On Wed, May 20, 2009 at 12:34:42PM -0700, jjjaime wrote:
> FUNCTION_1 &
> FUNCTION_2
> FUNCTION_3
>
> So, to speed up the execution of the script, I want FUNCTION_1 and
> FUNCTION_2 in parallel. But the script fails when FUNCTION_2 ends before
> FUNCTION_1.
Why?
> Is there any mechanism for synchronization (i.e. semaphores/mutes) or any
> other suggestion for simulating it?
You haven't really shown a need for it, but I'll assume your example is
simply misleading, and disregard it.
If what you're really asking for is a way to do mutual exclusion (mutexes)
then there are a few choices:
* mkdir is atomic, and you can use it for locking:
while ! mkdir $HOME/mylockdir; do
sleep 3
done
# Or something fancier.
Just be sure to remove it when you're done. (Set a 'trap', etc.)
* ln -s is also atomic and can be used similarly.
* There's "setlock" in daemontools (http://cr.yp.to/daemontools.html)
if you want third-party stuff.
If what you're really asking for is "How do I keep two jobs running in
the background at all times, starting another job when one finishes?"
then there are a couple recipes at
http://mywiki.wooledge.org/ProcessManagement#advanced
I mention this only because we get that question pretty often in #bash,
and since your example was not helpful, I'm not sure exactly what it is
you wanted.