linux-l: multithreading mit linux

Mirko Dziadzka dziadzka at ai-lab.fh-furtwangen.de
So Mai 10 15:20:41 CEST 1998


On Sun, May 10, 1998 at 02:20:01PM +0200, Gregor Kopij wrote:
> At 10:13 09.05.98 +0200, you wrote:
> Der Speicher wird nicht kopiert. Die Speicherstellen werden nur als shared
> markiert. Auch beim Fork/Clone wird nur dann speicher für den neuen Prozess
> angefordert und belegt, falls eine Änderung ansteht (beim beschreiben der
> gegebenen Speicherstelle). Wenn die Prozesse den Speicher (bzw. die
> betreffende Speicherstelle) nicht ändern, wird auch kein neuer Speicher

Das nennt sich Copy-on-Write und wird eigentlich bei allen neueren Unixen gemacht
und hilft fork() schneller und Speicherplatzsparender zu implementieren.
Bei Threads liegt aber ein echtes sharing vor, d.h. auch wenn du schreibend auf
den Speicher zugreifst, wird er nicht kopiert.

> Also, keine Angst ;-), es sei denn Du beschreibst wirklich den Speicher von
> allen Kindern. Dann hast Du ein "kleines" Problem, das man aber mit
> Shared-Memory in den Griff bekommen kann. Mußt Du Threads benutzen? Mit
> "direkter" Programmierung kann man es besser kontrollieren. 


Das "Problem" hast du nur bei fork(). pthread_create() shared den
Speicher richtig [beide rufen clone() auf, nur fork() sagt halt noch das
es getrennten Speicher haben will. In sofern gibt es zwischen Prozessen
und Threads im Linux keinen so grossen Unterschied wie es den zum
Beispiel bei einer reinen User-Space implementation von Threads gibt].
Es stimmt, das es schwerer ist mit Threads zu programmieren als mit fork()
- die Programme koennen wenn man alles mal verstanden hat aber erheblich
schoener, kuerzer und effizienter werden

	Mirko


-- 
++++++++++++ Linux - das beste Textadventure aller Zeiten  ++++++++++++




Mehr Informationen über die Mailingliste linux-l