Должен ли я создавать поток, если я хочу создать распределенную библиотеку мьютексов? - PullRequest
0 голосов
/ 21 июля 2011

Я пытаюсь написать простой алгоритм блокировки / разблокировки, который ведет себя как мьютекс в распределенных системах с C ++.

Он будет реализован в виде библиотеки, и пользователи смогут использовать его, используя файл интерфейса.

Предположим, что есть 3 процесса {A, B, C}.

Каждый процессор знает адреса и порты других процессов и т. Д.

Если A хочет заблокировать какой-либо объект, он получает разрешение от других процессов, которые в данном случае B и C.

Я считаю, что отправка и ожидание ответов от B, и C не будет проблемой, потому что пользователь обязательно вызовет функцию.

Но как B и C должны получить сообщение?

Гарантируется, что все процессы будут живы.

Должен ли быть отдельный поток для каждого процессора, выполняющего прослушивание (опрос) сокетов?

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

1 Ответ

1 голос
/ 21 июля 2011

Должен ли быть отдельный поток для каждого процессора, выполняющего прослушивание (опрос) сокетов?

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

Для вашей конкретной проблемы взаимного исключения в распределенных системах см. Maekawa'sАлгоритм .

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

Если вы планируете это реализовать, почему бы и нет.Распределенные системы часто используют многоуровневый подход (см., Например, http://www.erlang.org/course/error_handling.html в руководстве по Erlang).Уровень, по сути, представляет собой совокупность взаимодействующих и взаимозависимых процессов, которые работают вместе для достижения общей цели.Один из этих процессов может действовать как соединение с нижним уровнем, а другой процесс - как соединение с верхним уровнем.Вы можете реализовать весь слой в одном процессе операционной системы, используя потоки, которые создаются при создании процесса и уничтожаются при его уничтожении.Все зависит от того, чего вы хотите достичь и по какому пути вы идете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...