Реализация "критической секции" в Linux

Модератор: Модераторы разделов

vleo
Сообщения: 4

Re: Реализация "критической секции" в Linux

Сообщение vleo »

Вот ведь виндузовый менталитет. Для того, чтобы другой процесс не трогал файлы пока наш процесс их обрабатывает, вообще, никаких специальных системных вызовов не требуется. Операция 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
Спасибо сказали:
Аватара пользователя
nercus
Сообщения: 150

Re: Реализация "критической секции" в Linux

Сообщение nercus »

vleo писал(а):
15.01.2006 02:37
Вот ведь виндузовый менталитет. Для того, чтобы другой процесс не трогал файлы пока наш процесс их обрабатывает, вообще, никаких специальных системных вызовов не требуется. Операция mv на файловой системе - вполне атомарна. Может ren и не атомарна у MS, кто знает...
--- code ---

Не катит.
N процессов (где N > 1) могут одновременно находиться в

Код: Выделить всё

echo $$ > /tmp/lock.$$
mv /tmp/lock.$$ /tmp/lock
2.6.14-gentoo-r5
kde-3.5.0 | openbox-3.2
Deep Purple | Rob Zombie | Led Zeppelin | ДДТ
Спасибо сказали: