2016-05-28 4 views
1

Как потоки могут синхронизировать свою работу? Поскольку потоки внутри одного процесса совместно используют ресурсы, как потоки могут вести себя так, чтобы не мешать другим потокам? Просьба объяснить на понятном для понимания языке. Спасибо всем экспертам!Как потоки синхронизируют свою работу?

+0

Эта страница поможет вам начать работу: https://en.wikipedia.org/wiki/Synchronization_%28computer_science%29#Thread_or_process_synchronization – user20160

+0

Это помогло! Благодаря :) – Anonymous

ответ

1

Представьте себе узкую дверь, где люди могут пройти эту дверь по одному. Иногда, когда людей слишком много, они образуют очередь. Так что правильно запрограммированные потоки - они подчиняются соглашениям, чтобы не пытаться пройти дверь, когда она занята. Плохо запрограммированные потоки, а также недобросовестные люди могут игнорировать соглашения и делать беспорядок.

Основная абстракция в многопоточном программировании - это ресурс - область памяти, которая может принадлежать не более чем одному из потоков. Запросы потоков для ресурсов, дожидаться их, владеют ими и могут читать или записывать только в эту память, а также освобождать их.

Существует много примитивов синхронизации для работы с ресурсами, наиболее важными из которых являются семафоры, мониторы и блокирующие очереди.

Программисты, которые хотят разработать многопоточную программу, должны сначала составить план, какие ресурсы будут использоваться, и как потоки будут их обменивать. Затем выберите, какие стандартные средства синхронизации будут использоваться, или создайте новые объекты и запрограммируйте их. Специализированные объекты обычно изготавливаются с мониторами.

Часто преподавание многопоточного программирования начинается с использования мониторов для взаимодействия потоков. Это не верно. Сначала студент должен освоить использование стандартных средств - семафоров и очередей блокировки, которых достаточно для 95% случаев, и только потом научиться разрабатывать специализированные средства с помощью мониторов.