Вот ведь виндузовый менталитет. Для того, чтобы другой процесс не трогал файлы пока наш процесс их обрабатывает, вообще, никаких специальных системных вызовов не требуется. Операция mv на файловой системе - вполне атомарна. Может ren и не атомарна у MS, кто знает...
#! /bin/sh
LOCKED=0
while [ $LOCKED == 0 ]
do
while [ -f /tmp/lock ]
do
sleep 1
done
echo $$ > /tmp/lock.$$
mv /tmp/lock.$$ /tmp/lock
if [ $$ == `cat /tmp/lock` ]
then
LOCKED=1
echo "lock success"
else
echo "lock attempt fail"
fi
done
echo LOCKED
# critical secion
# do your shit here
sleep 5
# end critical section
rm /tmp/lock
Реализация "критической секции" в Linux
Модератор: Модераторы разделов
-
nercus
- Сообщения: 150
Re: Реализация "критической секции" в Linux
vleo писал(а): ↑15.01.2006 02:37Вот ведь виндузовый менталитет. Для того, чтобы другой процесс не трогал файлы пока наш процесс их обрабатывает, вообще, никаких специальных системных вызовов не требуется. Операция mv на файловой системе - вполне атомарна. Может ren и не атомарна у MS, кто знает...
--- code ---
Не катит.
N процессов (где N > 1) могут одновременно находиться в
Код: Выделить всё
echo $$ > /tmp/lock.$$
mv /tmp/lock.$$ /tmp/lock2.6.14-gentoo-r5
kde-3.5.0 | openbox-3.2
Deep Purple | Rob Zombie | Led Zeppelin | ДДТ
kde-3.5.0 | openbox-3.2
Deep Purple | Rob Zombie | Led Zeppelin | ДДТ