Я читал «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++ Concurrency In Action ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Почему мой метод параллельной быстрой сортировки медленнее последовательного метода?
Anonymous » » в форуме C# - 0 Ответы
- 17 Просмотры
-
Последнее сообщение Anonymous
-
-
-
К вопросу о потерянных элементах в lock-free очереди из "C++ Concurrency in Action"
Anonymous » » в форуме C++ - 0 Ответы
- 46 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как передать значение переменной класса Action в другой класс Action в Struts 2?
Anonymous » » в форуме JAVA - 0 Ответы
- 36 Просмотры
-
Последнее сообщение Anonymous
-