tales from the interview
softmaster — 02.02.2010 ещё задачка:есть буфер, массив байт, для простоты - бесконечный.
написать два метода -
write(byte *data, size_t size); // копируем (добавляем) данные в буфер.
read(byte *data, size_t size); // копируем (убираем) данные из буфера.
релизовать оба метода для многопоточной системы. без блокирования,aka lock free.
бонус: то же, буфер конечного размера, кольцевой (с wrapping).
update:
read=enqueue
write=dequeue
update2:
user mode. 32 битный. cmpxchg есть и умеет 32 бита.
в общем, всё как в жизни. если нужны какие-то допущения - просто указывайте их, не спрашивайте - час ночи уже, а я погребён под лавиной комментов %)