- Программа предназначена для запуска на Linux.
- Код написан на языке С++ с использованием библиотек языка С.
- Запуск программ производился из разных окон терминала WSL.
- Буфер служит для передачи отметок времени между процессами.
- Имеет размер 2040 байт и укладывается в 2КБ, должен помещаться в L1 кэш процессора.
- Имеет всего 2 операции, доступные пользователю:
read
иwrite
, которые в случае успеха возвращаютtrue
, иначеfalse
.
- Все переменные, к которым могут одновременно обращаться различные потоки сделаны атомарными
- чтобы обойтись без блокировок и уменьшить количество системных вызовов, потоки
reader
иwriter
используют активное ожидание, в случае если операцию чтения/записи невозможно сделать
- Принимает на вход в качестве аргумента время в микросекундах, на которое процесс уходит спать после каждой операции записи (так задаётся частота записи в буфер).
- Перед каждой операцией измеряет текущее время и записывает его в буфер.
g++ -lstdc++ writer.cpp ring_buffer.cpp -march=native -O2 -o writer
./writer 10
- После каждой операции измеряет текущее время и записывает разницу со считанным значением в массив.
- После считывания всех операций выводит получившиеся значения в стандартный поток вывода.
g++ -lstdc++ reader.cpp ring_buffer.cpp -march=native -O2 -o reader
./reader > result.txt