Каким будет реальный пример использования барьера в многопоточном приложении? - PullRequest
2 голосов
/ 03 декабря 2009

Пакет параллелизма JDK, библиотека потоков Boost, библиотека потоков Perl (но не в Python) - все они реализуют барьер, я не сталкивался с необходимостью использования барьера, поэтому мне интересно, каков типичный вариант использования в многопоточных приложения.

Ответы [ 3 ]

3 голосов
/ 03 декабря 2009

Барьеры могут быть использованы повсеместно с помощью надуманных примеров, но вы часто будете показывать их в методе разброса / уменьшения, где результаты различных потоков все требуются, прежде чем продолжить.

Если вы хотите распараллелить сортировку, например, вы можете разделить список n раз и запустить n потоков, чтобы отсортировать их раздел и сделать паузу, когда они все закончат, они умрут, давая понять родителю, что, наконец, можно объединить сортированные куски. (Я знаю, что есть лучшие способы, но это одна реализация).

Другое место, которое я видел, это параллельные сети, где у вас есть для отправки определенного количества данных на полезную нагрузку. Таким образом, интерфейс запустит n блоков и будет ждать их заполнения перед отправкой передачи. Когда вы думаете о разделенной линии T1, это имеет смысл, посылать один пакет данных по 64 мультиплексированным разделам было бы лучше, чем отправлять данные 1 раздела (который, по сути, стоит столько же, так как пакет должен быть дополнен нулями).

Надеюсь, что именно эти вещи заставят вас задуматься над проблемой!

1 голос
/ 03 декабря 2009

Пример: набор потоков работает одновременно для вычисления набора результатов, и указанный набор результатов (частично / полностью) требуется в качестве входных данных для следующего этапа обработки для некоторых / всех потоков у «барьера».

Барьер упрощает синхронизацию нескольких потоков, не создавая решение вокруг нескольких conditions & mutexes.

Не могу сказать, что часто видел barriers. В какой-то момент, по мере роста числа потоков, возможно, стоит рассмотреть возможность использования более «разъединенной» системы для управления возможными мертвыми блокировками.

0 голосов
/ 13 февраля 2014

MSDN: Барьер - это объект, который препятствует продолжению отдельных задач в параллельной операции, пока все задачи не достигнут барьера. Это полезно, когда параллельная операция происходит в фазы, и каждая фаза требует синхронизации между задачами.

Найдено здесь

...