#!/bin/bash
read_index=-1
readable=0
writeable=n
read_one()
{
echo "start to read...."
if [ $readable -le 0 ];then
echo "Cannot read anymore"
return 1
fi
read_index=$(( (read_index+1) % n))
readable=$((readable - 1))
writeable=$((writeable + 1))
echo "read from index : $read_index"
echo "readable=$readable writeable=$writeable"
return 0
}
write_one()
{
echo "start to write..."
if [ $writeable -le 0 ];then
echo "Cannot write anymore"
return 1
fi
write_index=$(( (write_index+1) % n))
readable=$((readable + 1))
writeable=$((writeable - 1))
echo "write from index : $write_index"
echo "readable=$readable writeable=$writeable"
return 0
}
read_one
read_one
read_one
read_one
write_one
write_one
write_one
write_one
read_one
read_one
write_one
echo '------------------------------'
# w --- r changes to r --- w
read_one
read_one
write_one
write_one
write_one
read_index=-1
write_index=-1
n=3
writeable=n
read_one()
{
echo "start to read...."
if [ $readable -le 0 ];then
echo "Cannot read anymore"
return 1
fi
read_index=$(( (read_index+1) % n))
readable=$((readable - 1))
writeable=$((writeable + 1))
echo "read from index : $read_index"
echo "readable=$readable writeable=$writeable"
return 0
}
write_one()
{
echo "start to write..."
if [ $writeable -le 0 ];then
echo "Cannot write anymore"
return 1
fi
write_index=$(( (write_index+1) % n))
readable=$((readable + 1))
writeable=$((writeable - 1))
echo "write from index : $write_index"
echo "readable=$readable writeable=$writeable"
return 0
}
# Start to unit test
# r --- w changes to w --- rread_one
read_one
read_one
read_one
write_one
write_one
write_one
write_one
read_one
read_one
write_one
echo '------------------------------'
# w --- r changes to r --- w
read_one
read_one
write_one
write_one
write_one