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 revision Previous revision
Next revision
Previous revision
courses:high_performance_computing:producer_consumer [2020/02/11 15:08]
kel
courses:high_performance_computing:producer_consumer [2020/05/03 12:25]
kel
Line 6: Line 6:
   - interruptor   - interruptor
   - N потоков consumer   - N потоков consumer
-На стандартный ввод программе подается строка - список чисел, разделённых пробелом. Длина списка чисел не задаётся - считывание происходит до перевода каретки.+На стандартный ввод программе подается строка - список чисел, разделённых пробелом ​(читать можно до конца ввода). Длина списка чисел не задаётся - считывание происходит до перевода каретки.
   * Задача producer-потока - получить на вход список чисел, и по очереди использовать каждое значение из этого списка для обновления переменной разделяемой между потоками   * Задача producer-потока - получить на вход список чисел, и по очереди использовать каждое значение из этого списка для обновления переменной разделяемой между потоками
   * Задача consumer-потоков отреагировать на уведомление от producer и набирать сумму полученных значений. Также этот поток должен защититься от попыток потока-interruptor его остановить. Дополнительные условия:​   * Задача consumer-потоков отреагировать на уведомление от producer и набирать сумму полученных значений. Также этот поток должен защититься от попыток потока-interruptor его остановить. Дополнительные условия:​
Line 24: Line 24:
 Так-же необходимо реализовать поддержку ключа --debug, при использовании которого каждый consumer-поток будет выводить пару (tid, psum), где tid реализуется с помощью функции get_tid(), а psum это сумма которую посчитал поток. Вывод значений psum происходит при каждом изменении. Так-же необходимо реализовать поддержку ключа --debug, при использовании которого каждый consumer-поток будет выводить пару (tid, psum), где tid реализуется с помощью функции get_tid(), а psum это сумма которую посчитал поток. Вывод значений psum происходит при каждом изменении.
  
-Функция get_tid() возвращает идентификатор потока. Идентификатор потока это не проста pthread_self(),​ а уникальное для каждого потока число в диапозоне от 1 .. 3+N. Значение этого числа предполагается хранить в TLS.+Функция get_tid() возвращает идентификатор потока. Идентификатор потока это не проста pthread_self(),​ а уникальное для каждого потока число в диапозоне от 1 .. 3+N. Значение этого числа предполагается хранить в TLS. Память под сохраняемое значение должно выделяться в heap, а указатель на него в TLS. Так-же функция get_tid должна быть самодостаточной (для использования ее в другом проекте должно быть достаточно только скопировать get_tid и использовать)
  
 В поток вывода должно попадать только результирующее значение,​ по умолчанию никакой отладочной или запросной информации выводиться не должно. В поток вывода должно попадать только результирующее значение,​ по умолчанию никакой отладочной или запросной информации выводиться не должно.
courses/high_performance_computing/producer_consumer.txt · Last modified: 2020/05/03 12:25 by kel