Skip to content

rpuwa/shmem_task

Repository files navigation

shmem_task

Описание решения

  • Программа предназначена для запуска на Linux.
  • Код написан на языке С++ с использованием библиотек языка С.
  • Запуск программ производился из разных окон терминала WSL.

ring_buffer

  • Буфер служит для передачи отметок времени между процессами.
  • Имеет размер 2040 байт и укладывается в 2КБ, должен помещаться в L1 кэш процессора.
  • Имеет всего 2 операции, доступные пользователю: read и write, которые в случае успеха возвращают true, иначе false.

Потокобезопасность

  • Все переменные, к которым могут одновременно обращаться различные потоки сделаны атомарными
  • чтобы обойтись без блокировок и уменьшить количество системных вызовов, потоки reader и writer используют активное ожидание, в случае если операцию чтения/записи невозможно сделать

writer

  • Принимает на вход в качестве аргумента время в микросекундах, на которое процесс уходит спать после каждой операции записи (так задаётся частота записи в буфер).
  • Перед каждой операцией измеряет текущее время и записывает его в буфер.

Команда для компиляции:

g++ -lstdc++ writer.cpp ring_buffer.cpp -march=native -O2 -o writer

Пример команды запуска:

./writer 10

reader

  • После каждой операции измеряет текущее время и записывает разницу со считанным значением в массив.
  • После считывания всех операций выводит получившиеся значения в стандартный поток вывода.

Команда для компиляции:

g++ -lstdc++ reader.cpp ring_buffer.cpp -march=native -O2 -o reader

Пример команды запуска (с перенаправлением вывода в файл):

./reader > result.txt

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published