#! /bin/bash

if [ -z "$1" ]; then
    echo "Usage: $0 ressource-type-name"
    exit 1
fi

resource_type=$1
semaphore_counter=semaphore_counter_${1}s
semaphore_waiting_queue=semaphore_waiting_queue_${1}s

./P.sh "$semaphore_counter".lock

# attend qu'il existe une ressource libre
# pendant l'attente, s'insere dans la liste d'attente
echo "$PPID" >> $semaphore_waiting_queue
read c < $semaphore_counter
while [ "$c" -lt 1 ]; do
    ./V.sh "$semaphore_counter".lock
    sleep 1
    ./P.sh "$semaphore_counter".lock
    read c < $semaphore_counter
done
# se retire de la liste d'attente
grep -v "^$PPID$" $semaphore_waiting_queue > "$semaphore_waiting_queue".tmp
mv "$semaphore_waiting_queue".tmp $semaphore_waiting_queue

# cherche et prend une ressource
for r in "$resource_type"*; do
    read process < $r
    if [ $process -eq 0 ]; then
        echo "$PPID" > $r
        break
    fi
done

# met a jour le compteur du type de la ressource
c=$(expr $c - 1)
echo $c > $semaphore_counter

./V.sh "$semaphore_counter".lock

exit 0
