Потенциальная ошибка в примере параллельной быстрой сортировки из 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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