Skocz do zawartości

Lockfile Problem


Aryman1983

Rekomendowane odpowiedzi

Witam. W szkole zadano nam napisanie skryptu, który rozwiązywałby problem ucztujących filozofów skrypt napisałem lecz pojawił się problem z poleceniem lockfile. Otóż przy zakładaniu blokady dwa procesy mogą zrobić to na tym samym pliku.

#!/bin/bash


function pobierz
{
  	echo `date` Filozof $1 podnosi widelec $2
lockfile -1 -r 1 widelec$2
  	echo `date` Filozof $1 podnosi widelec $3
lockfile -1 -r 1 widelec$3

}

function jedzenie
{
echo `date` Filozof $1 ucztuje
  	sleep $2
echo `date` Filozof $1 zjadl $3 posilkow
}

function odloz
{

  	echo `date` Filozof $1 odklada widelec $2
rm -f widelec$2
  	echo `date` Filozof $1 odklada widelec $3
rm -f widelec$3


}

function rozmysla
{
echo `date` Filozof $1 rozmysla
  	sleep $2	
}



cd katalog
skonsumowanych=1
fil=$1
numer1=$1

if [ $numer1 -eq $liczba ] ; then 

  numer2=1
else
  numer2=$[numer1+1]
fi


while  [ $skonsumowanych -le $posilek ] ; do


	if [ $(($fil%2)) -eq 0 ] ; then
		pobierz $fil $numer2 $numer1 
		jedzenie $fil $limit $skonsumowanych	
		odloz $fil $numer1 $numer2
		rozmysla $fil $czeka
	else
		pobierz $fil $numer1 $numer2 
		jedzenie $fil $limit $skonsumowanych	
		odloz $fil $numer2 $numer1
		rozmysla $fil $czeka
	fi
((skonsumowanych++))


done

Dorzucę jeszcze plik start żeby, ktoś mógł sobie spojrzeć jak to wygląda w praktyce.

#!/bin/bash
rmdir katalog
mkdir katalog
echo "Liczba filozofow: "
read liczba
readonly liczba;
echo "Limit czasowy dla filozofa: "
read limit
readonly limit;
echo "Liczba zjedzonych posilkow: "
read posilek
readonly posilek;
echo "Limit czasowy rozmyslania: "
read czeka
readonly czeka;
x=1
while [ $x -le $liczba ]; 
do
export liczba;
export limit;
export posilek;
export czeka;
./filozof.sh $x &
((x++))
done;

Wydaje mi się, że użyłem złych opcji przy lockfile dlatego następny filozof może podnieść ten sam widelec co nie powinno być możliwe. Bardzo proszę o pomoc w rozwiązaniu tego problemu gdyż już brakuje mi pomysłów:(

Z góry dziękuję.

Odnośnik do komentarza
Udostępnij na innych stronach

Lockfile dziala, ale Ty go zle uzywasz ;)

 

Ja odpalilem ten skrypt i mialem kilka razy:

lockfile: Sorry, giving up on "widelec5"

 

Co oznacza, ze nie udalo sie uzyskac locka. Chyba powinienes najpierw zrobic locka, i jesli wynik locka bedzie pozytywny to dopiero wtedy wypisz komunikat, ze podniosl. Poza tym, mozesz uzyc parametru -r -1. Wowczas, lockfile bedzie probowal zalozyc locka na plik az do skutku.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
×
×
  • Dodaj nową pozycję...