Frage

meine Frage ist etwas konzeptionell, wie ist Eltern-Prozess Daten mit Kind-Prozess durch einen fork() Anruf oder mit einem Gewinde von pthread_create() erstellt erstellt geteilt

sind beispielsweise globale Variablen direkt übergeben, in untergeordnetem Prozess, und wenn ja, tut Modifikation auf, die von Kind-Prozess Effekt Wert davon in übergeordnetem Prozess variabel gemacht?

schätzen i partielle und vollständige Antworten im Voraus, wenn ich eine vorhandene Ressource fehlt bin, tut mir leid, ich auf Google einige Suche gemacht haben, aber keine guten Ergebnisse finden konnten

Nochmals vielen Dank für Ihre Zeit und Antworten

War es hilfreich?

Lösung

Die Semantik von fork () und pthread_create () ist ein wenig anders.

fork () einen neuen Prozess erstellen, in dem die globalen Variablen getrennt zwischen Eltern und Kindern sein werden. Die meisten OS-Implementierungen werden Copy-on-Write-Semantik verwenden, sowohl was bedeutet, dass die Eltern-Kind-Prozess werden die gleichen physikalischen Speicherseiten für alle globalen Variablen, bis einem der Prozesse Versuchen, bearbeiten verwenden die physikalischen Speicher, an welcher Stelle eine Kopie davon Seite gemacht wird, so dass nun jeder Prozess seine eigene Kopie erhält und nicht der andere Prozess ist nicht sehen, so dass die Prozesse getrennt werden.

pthread_create () auf der anderen Seite erzeugt einen neuen Thread innerhalb des gleichen Prozesses. Der neue Faden wird über einen separaten Stapelspeicher von den anderen laufenden Threads desselben Prozesses haben jedoch die globalen Variablen und Heap-Speicher sind zwischen allen Threads desselben Prozesses geteilt. Aus diesem Grunde ist man oft einen Mutex braucht Zugang zu einem gemeinsamen Teil des Speichers zwischen mehreren Threads desselben Prozesses zu koordinieren.

TL; DR-Version: mit fork (), denen Sie nicht dem anderen Kerl Änderungen sehen; (Mit pthread_create) Sie tun.

Andere Tipps

Eine Gabel erzeugt eine fast exakte Kopie des anrufenden Prozess, einschließlich Speicher und Datei-Deskriptoren. Globale Variablen werden zusammen mit allen anderen kopiert, aber sie sind nicht in irgendeiner Weise mit dem übergeordneten Prozess verknüpft. Da Filedeskriptoren auch kopiert werden, Eltern und Kind über diese interagieren können (solange sie sind korrekt eingerichtet, in der Regel über ein Rohr oder socket).

Es gibt einen großen Unterschied zwischen den Prozessen von fork erstellt und zwischen Threads mit pthread_create erstellt. Prozesse nicht teilen globale Variablen und sollen vom Betriebssystem bereitgestellt durch Leitungen, Steckdosen oder andere Tools kommunizieren. Eine gute Lösung ist MPI - das ist eine Message-Passing-Bibliothek für Interprozesskommunikation ist

.

Themen sind recht unterschiedlich. Ein Thread erstellt mit pthread_create Aktien alle globalen Variablen mit ihrem Aufrufer. Darüber hinaus kann der Anrufer eine beliebige Struktur in das Gewinde passieren, und diese Struktur wird auch geteilt werden. Dies bedeutet, dass man sollte sehr vorsichtig sein, wenn sie mit Fäden Programmierung - solche Mengen des Teilens sind gefährlich und fehleranfällig. Die pthread API bietet mutexes und Bedingungen für eine robuste Synchronisation zwischen Threads (obwohl es nach wie vor der Praxis und Know-how erfordert korrekt zu implementieren).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top