以下のように循環バッファを実装しています。
long windex = 0, rindex = 0, count = 0;
producer_ISR() /* whenever the data avail, then gets the interrupt */
{
/* store the data in array buffer */
array[windex] = data;
windex++;
count = count + 1; /* Increment the count */
if (windex == 32) /* overflow condition */
windex = 0;
}
consumer
{
while(1)
{
if(count > 0)
{
/* process the data */
data1 = array[rindex];
rindex++;
count = count - 1; /* decrement the count */
if (rindex == 32 ) /* overflow condition */
rindex = 0;
}
}
}
このコードでは、上記の 2 つの関数の間で共有変数「count」を保護するためにセマフォが必要ですか?
私の分析によると、セマフォは必要ありません。アイデアを共有してください。