LINUX.ORG.RU

Хочу mutex'ы при помощи MPI

 ,


0

1

Есть программа с межпроцессным взаимодействием на основе MPI. Хочу релизовать простейший mutex: каждый процесс должен выполнять некоторый участок кода «единолично». Как это лучше сделать (при помощи MPI)?

★★★★☆
Ответ на: комментарий от anonymous

как? Процессы могут быть на разных компьютерах

Sahas ★★★★☆
() автор топика
Ответ на: комментарий от Sahas

MPI для распределенных систем же! Там всё на сообщениях лучше делать, зачем тебе мьютексы?

shkolnick-kun ★★★★★
()
Ответ на: комментарий от shkolnick-kun

код для записи в один файл. Да, я знаю, что есть Mpi_file_open, но заранее неизвестно, сколько каждый процесс пишет. Процессам можно писать в произвольной последовательности. В принципе, можно все данные пересылать одному процессу, просто это несколько запарно...

Sahas ★★★★☆
() автор топика
Ответ на: комментарий от Sahas

У тебя основной механизм взаимодействия между процессами - сообщения, а это означает, что рулит клиент-серверная архитектура приложений.

В принципе ты можешь сделать мьютекс по тому же принципу, что в L4Re, - через serialization thread, но зачем костылить, если можно сразу написать сервер, который будет делать вывод в файл?

anonymous
()
Ответ на: комментарий от Sahas

Ну так и кинь flock, остальные обломятся на попытке его открыть.

Gorthauer ★★★★★
()
Ответ на: комментарий от AlexVR

нет. Есть список из пар процессов, каждая пара общается между собой и, так сказать, по результатам общения пишет некую инфу в один файл.

Sahas ★★★★☆
() автор топика
Ответ на: комментарий от t184256

Gorthauer

А, простите, блокировка файлов чем не годна?

штука несколько специфичная, и вообще не хотелось бы через файлы это делать, но, видимо, придётся использовать что-то подобное...

Sahas ★★★★☆
() автор топика
Ответ на: комментарий от anonymous

зачем костылить, если можно сразу написать сервер, который будет делать вывод в файл?

Хочу mutex'ы при помощи MPI (комментарий)

можно. Просто это немного сложнее, чем просто сделать, например, lock файла, как тут предлагают.

Sahas ★★★★☆
() автор топика
Последнее исправление: Sahas (всего исправлений: 1)
Ответ на: комментарий от Sahas

Есть список из пар процессов, каждая пара общается между собой и, так сказать, по результатам общения пишет некую инфу в один файл

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

AlexVR ★★★★★
()
Ответ на: комментарий от AlexVR

Это в разы быстрее будет (расчётные потоки не должны тормозиться на файлах). И делается намного проще.

в моем случае скорость не критична (для данного участка кода). Делается это чуть сложнее, чем когда каждый процесс сам пишет (это можно сделать). И главное - у меня уже это написано =) Осталось ссинхронизировать запись

Sahas ★★★★☆
() автор топика
Последнее исправление: Sahas (всего исправлений: 1)
Ответ на: комментарий от Sahas

Ну тогда просто сделай мьютекс на потоке.

То есть делай поток, которому клиенты отправляют сообщеная типа «дай мне доступ», а он такой клиенту «ну на», а клиент файлом попользовался и говорит «спасибо», а сервер такой следующему клиенту «ну на» и так далее.

anonymous
()
Ответ на: комментарий от Sahas

Какая разница, где они находятся? Или там нельзя использовать блокирующий IPC, если треды не на одном узле сети?

anonymous
()
Ответ на: комментарий от anonymous

меня сбило с толку слово «поток». Так, конечно, можно

Sahas ★★★★☆
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.