2010-10-12 14 views
10

Da C# Threading unterstützt, gibt es eine Möglichkeit, das Gabelkonzept in C# zu implementieren?Fork Concept in C#

Vielen Dank im Voraus ....

+0

Wie in der Unix-Befehlsgabel? In diesem Fall nein. –

Antwort

18

Das ist mehr eine Frage des .NET/CLR als von C#. Im Allgemeinen handelt es sich um das zugrunde liegende Betriebssystem. Windows unterstützt keine fork() -ähnliche Semantik beim Erstellen neuer Prozesse. Auch fork() hat nichts mit Multithreading-Unterstützung zu tun.

Die Semantik von fork() beinhaltet das Duplizieren des Inhalts des Adressraums des ursprünglichen Prozesses. Meiner Meinung nach ist dies ein veralteter Ansatz für die Erstellung von Prozessen und hat in der Windows-Welt kaum Platz, da dies viele Aspekte der Sicherheit und Betriebssystemarchitektur betrifft. Das grundlegende Problem mit fork() wäre aus der Sicht von .NET der Ansatz zum Duplizieren und/oder Teilen nicht verwalteter Ressourcen (Dateihandles, Synchronisationsobjekte, Fenstergriffe (!) Usw.) zwischen dem alten und dem neuer Prozess. Ich denke, es gibt keinen ernsthaften Grund, ein solches Konzept entweder in .NET oder dem zugrunde liegenden Windows-Betriebssystem einzuführen.

Für weitere Diskussion siehe Link von suarabh.

+0

Ein wichtiger Grund, den ich mir vorstellen kann, ist Deadlocks (Thread Forking) zu behandeln. Es ist eine fortgeschrittene Idee. Aber das Drücken und Öffnen von Thread-Zuständen (Fork und Sleep des neuen Threads) zusammen mit der Versionierung von Objekten, die gesperrt werden, könnten Ihnen erlauben, wieder zu springen, bevor Deadlocks entstehen könnten. (Hinweis: Deadlocks verhindern Datenkorruption ... Sie könnten sie beide loslassen, aber die Daten werden nicht mehr ausschließlich gesperrt - selbst wenn nur ein Thread gleichzeitig ausgeführt wird). Dies gibt uns nicht-blockierende atomare Objekte (sogar Datenbank Deadlock). Das ist ein wichtiger Grund. – TamusJRoyce

+0

Bitte beachten Sie, dass 'fork' auf .NET keine gewünschten Effekte liefert. 'fork' spielt nicht gut mit Multithread-Anwendungen, es bewirkt, dass alle anderen Threads beendet werden. Eine .NET-Anwendung ist per Definition multi-threaded, da mindestens ein GC-Thread ausgeführt wird. – Sebazzz