Как работают обратные вызовы и глобальная синхронизация данных - PullRequest
0 голосов
/ 02 ноября 2011

У меня возникли некоторые трудности в понимании обратных вызовов и потока программ, проблем синхронизации.

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

Теперь это приведет к проблемам синхронизации?Допустим, я нахожусь в середине чтения из g_peers, когда пир уходит и вызывается обратный вызов, который модифицирует g_peers.

Как работает обратный вызов?Прерывается ли нормальный поток до завершения обратного вызова?

1 Ответ

1 голос
/ 02 ноября 2011

Глобальные переменные в многопоточной среде всегда необходимо синхронизировать для одновременного доступа через несколько потоков.
Если ваша среда многопоточная, обратный вызов будет вызываться в отдельном потоке и, следовательно, должен быть синхронизирован.
Если ваша среда однопоточная, синхронизация не требуется.

Что такое обратный вызов?

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

...