Асинхронный семафор

Поделись знанием:
Перейти к: навигация, поиск
К:Википедия:Страницы на КУ (тип: не указан)

Асинхронный семафор — это структура, которая используется в асинхронных моделях программирования. Её цель — заблокировать fire-действие, позволяя ему выполниться только после того, как группа других, асинхронных действий выполнится полностью.

Асинхронный семафор — специфический тип абстрактной структуры данных семафор в мире асинхронного программирования.

Концепцию семафоров изобрел голландский учёный Эдсгер Дейкстра.



Структура асинхронного семафора

Асинхронный семафор принимает функцию как аргумент: Этот аргумент обычно называют «fire-функция». Fire-функция будет выполнена после того, как все асинхронные действия будут завершены.

Асинхронный семафор также имеет блокирующую переменную: счетчик, который хранит число невыполненных на данный момент асинхронных действий, оставшихся в очереди. Когда этот счетчик становится равным нулю, все асинхронные действия уже завершились и вызывается fire-функция.

Асинхронный семафор имеет две дополнительные функции:

Функция v(): при вызове этой функции, значение внутренней блокирующей переменной увеличивается. Это увеличение характеризует добавление одного из асинхронных действий в очередь и ожидание им процессорного времени для выполнения.

Функция p() : когда асинхронное действие завершается, вызывается функция р(). Функция p() уменьшает значение внутренней блокирующей переменной. Выполненное асинхронное действие завершается и удаляется из очереди. Функция p() вызывается изнутри завершенного асинхронного действия функции обратного вызова. Функция p() также проверяет равенство нулю переменной, которая характеризует количество асинхронных действий в очереди. Если это так, все действия были завершены, и fire-функция может быть вызвана.

Использование асинхронного семафора

Всякий раз, когда программист вызывает одно из асинхронных действий (которое на самом деле будет выполнено потом, когда освободится процессорное время), программист также вызывает функцию v() асинхронного семафора в целях увеличения внутренней переменной блокировки, которая характеризует факт добавления асинхронного действия в очередь.

Когда обратный вызов этой асинхронной функции закончил своё выполнение, вызывается функция p(), которая уменьшает внутреннюю переменную блокировки. Это отражает тот факт, что асинхронное действие завершено.

Функция p() также проверяет, равна ли нулю переменная блокировки. Если это так, значит все асинхронные действия были завершены и «fire-функция» будет вызвана.

Асинхронный семафор эффективен, когда асинхронные действия выполняются независимо.

Напишите отзыв о статье "Асинхронный семафор"

Ссылки


К:Википедия:Статьи без источников (тип: не указан)

Отрывок, характеризующий Асинхронный семафор

Несколько раз во время похода бывали фальшивые тревоги, и солдаты конвоя поднимали ружья, стреляли и бежали стремглав, давя друг друга, но потом опять собирались и бранили друг друга за напрасный страх.
Эти три сборища, шедшие вместе, – кавалерийское депо, депо пленных и обоз Жюно, – все еще составляли что то отдельное и цельное, хотя и то, и другое, и третье быстро таяло.
В депо, в котором было сто двадцать повозок сначала, теперь оставалось не больше шестидесяти; остальные были отбиты или брошены. Из обоза Жюно тоже было оставлено и отбито несколько повозок. Три повозки были разграблены набежавшими отсталыми солдатами из корпуса Даву. Из разговоров немцев Пьер слышал, что к этому обозу ставили караул больше, чем к пленным, и что один из их товарищей, солдат немец, был расстрелян по приказанию самого маршала за то, что у солдата нашли серебряную ложку, принадлежавшую маршалу.
Больше же всего из этих трех сборищ растаяло депо пленных. Из трехсот тридцати человек, вышедших из Москвы, теперь оставалось меньше ста. Пленные еще более, чем седла кавалерийского депо и чем обоз Жюно, тяготили конвоирующих солдат. Седла и ложки Жюно, они понимали, что могли для чего нибудь пригодиться, но для чего было голодным и холодным солдатам конвоя стоять на карауле и стеречь таких же холодных и голодных русских, которые мерли и отставали дорогой, которых было велено пристреливать, – это было не только непонятно, но и противно. И конвойные, как бы боясь в том горестном положении, в котором они сами находились, не отдаться бывшему в них чувству жалости к пленным и тем ухудшить свое положение, особенно мрачно и строго обращались с ними.
В Дорогобуже, в то время как, заперев пленных в конюшню, конвойные солдаты ушли грабить свои же магазины, несколько человек пленных солдат подкопались под стену и убежали, но были захвачены французами и расстреляны.
Прежний, введенный при выходе из Москвы, порядок, чтобы пленные офицеры шли отдельно от солдат, уже давно был уничтожен; все те, которые могли идти, шли вместе, и Пьер с третьего перехода уже соединился опять с Каратаевым и лиловой кривоногой собакой, которая избрала себе хозяином Каратаева.
С Каратаевым, на третий день выхода из Москвы, сделалась та лихорадка, от которой он лежал в московском гошпитале, и по мере того как Каратаев ослабевал, Пьер отдалялся от него. Пьер не знал отчего, но, с тех пор как Каратаев стал слабеть, Пьер должен был делать усилие над собой, чтобы подойти к нему. И подходя к нему и слушая те тихие стоны, с которыми Каратаев обыкновенно на привалах ложился, и чувствуя усилившийся теперь запах, который издавал от себя Каратаев, Пьер отходил от него подальше и не думал о нем.