2016-05-26 4 views
5

Рассмотрите исполняемый файл с именем makecookie (обычная старая последовательная/непараллельная программа). Я хотел бы запустить два экземпляра его в то же время (открыв два терминала, например), как показано ниже:Хорошо запустить несколько экземпляров одного и того же исполняемого файла?

Первый терминал:

~/makecookie vanilla dataToRead.dat 

Второй терминал:

cd ~ 
mkdir secondJar 
ln -s ~/makecookie secondJar/ 
secondJar/makecookie chocolate dataToRead.dat 

Второй аргумент - это строка конфигурации, а третий - файл данных для открытия и чтения. Результат будет выводиться на терминал stdout.

Это приводит к тому, что один и тот же исполняемый файл выполняется одновременно. Будут ли проблемы с этим? Почему или почему нет?

ответ

4

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

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

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

Поскольку вы используете файл dataToRead.dat исключительно для чтения, у вас не возникнут проблемы.

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

Смежные вопросы