courses:high_performance_computing:producer_consumer
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
courses:high_performance_computing:producer_consumer [2019/07/27 22:56] – odoronin | 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 20: | Line 20: | ||
- Число потоков consumer | - Число потоков consumer | ||
- Верхний предел сна consumer в миллисекундах | - Верхний предел сна consumer в миллисекундах | ||
+ | |||
+ | |||
+ | Так-же необходимо реализовать поддержку ключа --debug, при использовании которого каждый consumer-поток будет выводить пару (tid, psum), где tid реализуется с помощью функции get_tid(), а psum это сумма которую посчитал поток. Вывод значений psum происходит при каждом изменении. | ||
+ | |||
+ | Функция get_tid() возвращает идентификатор потока. Идентификатор потока это не проста pthread_self(), | ||
В поток вывода должно попадать только результирующее значение, | В поток вывода должно попадать только результирующее значение, | ||
Line 48: | Line 53: | ||
// return aggregated sum of values | // return aggregated sum of values | ||
+ | return 0; | ||
+ | } | ||
+ | |||
+ | int get_tid() { | ||
+ | // 1 to 3+N thread ID | ||
+ | | ||
return 0; | return 0; | ||
} | } |
courses/high_performance_computing/producer_consumer.txt · Last modified: 2024/03/04 02:19 by odoronin