Потенциальная ошибка в примере параллельной быстрой сортировки из C++ Concurrency In ActionC++

Программы на C++. Форум разработчиков
Anonymous
Потенциальная ошибка в примере параллельной быстрой сортировки из C++ Concurrency In Action

Сообщение Anonymous »

Я читал «C++ Concurrency In Action (2-е издание)» Энтони Уильямса. В главе 8, листинг кода 8.1 на стр. 855, приведен пример кода для параллельной реализации быстрой сортировки. Мне интересно, содержит ли этот код ошибку, в частности, в том, что член threads класса sorter является простым непотокобезопасным вектором. Насколько я понимаю, функция do_sort помещает новые элементы в sorter::threads и порождает новый поток, который рекурсивно вызывает do_sort. Так не будем ли мы использовать sorter::threads из нескольких параллельных потоков без какой-либо защиты от гонок данных?
Я проверил раздел об ошибках на веб-странице книги и не смог найти упоминание об этой проблеме. Я также пытался связаться с автором, но не получил ответа.
Для удобства приведен код, о котором идет речь:
template
struct sorter
{
struct chunk_to_sort
{
std::list data;
std::promise promise;
};

thread_safe_stack chunks;
std::vector threads;
unsigned const max_thread_count;
std::atomic end_of_data;

sorter():
max_thread_count(std::thread::hardware_concurrency()-1),
end_of_data(false)
{}

~sorter()
{
end_of_data=true;
for(unsigned i=0;i

Подробнее здесь: https://stackoverflow.com/questions/752 ... -in-action

Вернуться в «C++»