Open Source & Linux Lab

It's better when it's simple

User Tools

Site Tools


courses:high_performance_computing:producer_consumer

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
courses:high_performance_computing:producer_consumer [2024/03/04 02:01] odoronincourses:high_performance_computing:producer_consumer [2024/03/04 02:19] (current) odoronin
Line 17: Line 17:
   * Задача потока-interruptor проста: пока происходит процесс обновления значений, он должен постоянно пытаться остановить случайный поток consumer (вычисление случайного потока происходит перед каждой попыткой остановки). Как только поток producer произвел последнее обновление, этот поток завершается. В этом потоке можно выполнять вспомогательные действия которые помогут корректно обработать сигнал   * Задача потока-interruptor проста: пока происходит процесс обновления значений, он должен постоянно пытаться остановить случайный поток consumer (вычисление случайного потока происходит перед каждой попыткой остановки). Как только поток producer произвел последнее обновление, этот поток завершается. В этом потоке можно выполнять вспомогательные действия которые помогут корректно обработать сигнал
   * Завершение приложения происходит или при считывании перевода каретки из файла или по посылке сигнала SIGTERM, обработку которого нужно также добавить. В обработчике сигнала можно вызывать только signal-safe функции https://man7.org/linux/man-pages/man7/signal-safety.7.html В случае, если в этот момент поток, читающий данные с файла, находится в режиме блокирующего чтения, - он также должен корректно завершиться. Полезно присмотреться к [[https://en.cppreference.com/w/cpp/utility/program/sig_atomic_t|std::sig_atomic_t]] - позволяет потокобезопасно и signal-safe обращаться к переменной такого типа.   * Завершение приложения происходит или при считывании перевода каретки из файла или по посылке сигнала SIGTERM, обработку которого нужно также добавить. В обработчике сигнала можно вызывать только signal-safe функции https://man7.org/linux/man-pages/man7/signal-safety.7.html В случае, если в этот момент поток, читающий данные с файла, находится в режиме блокирующего чтения, - он также должен корректно завершиться. Полезно присмотреться к [[https://en.cppreference.com/w/cpp/utility/program/sig_atomic_t|std::sig_atomic_t]] - позволяет потокобезопасно и signal-safe обращаться к переменной такого типа.
 +  * При сигнале в качестве вывода нужно выдавать посчитанную на этот момент сумму
   * В нашем producer/consumer необходимо реализоваться потоковую обрботку данных для этих целей запрещается загружать весь файл в ОЗУ, иначе на больших файлах обработка не будет помещаться в ограничения ОЗУ на вычислительном устройстве.   * В нашем producer/consumer необходимо реализоваться потоковую обрботку данных для этих целей запрещается загружать весь файл в ОЗУ, иначе на больших файлах обработка не будет помещаться в ограничения ОЗУ на вычислительном устройстве.
 Функция run_threads должна запускать все потоки, дожидаться их выполнения, и возвращать результат общего суммирования.  Функция run_threads должна запускать все потоки, дожидаться их выполнения, и возвращать результат общего суммирования. 
courses/high_performance_computing/producer_consumer.txt · Last modified: 2024/03/04 02:19 by odoronin