Цитата(zltigo @ Oct 12 2006, 18:55)

Цитата
Код засовывания примерно тако?
Код
if((tbuf.tail - tbuf.head) <= (TBUF_SIZE_MSK))
tbuf.buf[(tbuf.tail++)&(TBUF_SIZE_MSK)] = X;
else
...
Разумеется нет :-)
Код
tbuf.buf[(bp.tail++)&(TBUF_SIZE_MSK)] = X;
И
все!
Прочувствовали разницу и про переполнение стало яснее?
Не почуствовал.
Не вижу никакого контроля факта переполнения буфера.
Давайте на примере.
Допустим буфер 16 байт, TBUF_SIZE_MSK=0x0F
Запихиваем больше 16-ти байт, например 17 байт такие 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
Легко, контроля то нет. 17-ый лёг на место первого.
Читающий процесс (как в прерываннии вверху треда) также легко их достаёт, но достаёт он такую последовательнось:
16,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
И чё тут клёвого?