2016-05-26 11 views
5

Betrachten Sie eine ausführbare Datei mit dem Namen makecookie (einfaches altes serielles/nicht-parallelisiertes Programm). Ich möchte zwei Beispiele davon in der gleichen Zeit laufen (mit zwei Anschlüssen zu öffnen, zum Beispiel), wie folgt:Okay, um mehrere Instanzen der gleichen ausführbaren Datei auszuführen?

Erstes Terminal:

~/makecookie vanilla dataToRead.dat 

zweiten Terminal:

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

Das zweite Argument ist eine Konfigurationszeichenfolge und das dritte Argument ist eine Datendatei zum Öffnen und Lesen. Das Ergebnis wird am Terminal auf stdout ausgegeben.

Dies bewirkt, dass dieselbe ausführbare Datei zur gleichen Zeit ausgeführt wird. Wird es irgendwelche Probleme damit geben? Warum oder warum nicht?

Antwort

4

Das Ausführen mehrerer Instanzen einer gleichen ausführbaren Datei verursacht keine Probleme. In den Augen des Betriebssystems sind es zwei verschiedene Prozesse. Jede Instanz hat ihre eigenen Seitentabellen, Dateideskriptoren, Stack, PID usw., die von allen anderen Instanzen unabhängig sind.

Wenn Sie jedoch auf dieselbe Ressource in verschiedenen Prozessen zugreifen, müssen Sie den Ressourcenzugriff mit einer der Sperrstrategien synchronisieren. Zum Beispiel führen zwei Instanzen, die in dieselbe Datei schreiben, zu Ungenauigkeiten in der Datei, wobei eine Instanz möglicherweise in der Mitte der Daten einer anderen Instanz schreiben könnte.

Zwei Instanzen lesen aus einer Datei wird kein Problem sein, aber wenn man schreibt und andere liest das Ergebnis wird chaotisch sein. Hinweis: Jede Instanz hat ihren eigenen Schreib-/Lesezeiger, wo sie unabhängig von anderen Instanzen lesen/schreiben.

Da Sie die Datei dataToRead.dat rein zum Lesen verwenden, werden Sie keine Probleme bekommen.

Insgesamt gibt es kein Problem beim Ausführen mehrerer Instanzen, wenn Sie den Ressourcenzugriff ordnungsgemäß synchronisiert haben.

Verwandte Themen