2010-10-12 13 views
10

Dado que C# admite el roscado, ¿hay alguna forma de implementar el concepto de horquilla en C#?Concepto de horquilla en C#

Gracias de antemano ....

+0

Como en el tenedor del comando de Unix? En ese caso no. –

Respuesta

18

Esto es más una cuestión de .NET/CLR que de C#. En general, es una cuestión del sistema operativo subyacente. Windows no es compatible con fork(), como la semántica de generar nuevos procesos. Además, fork() no tiene nada que ver con el soporte de subprocesos múltiples.

La semántica de fork() implica la duplicación del contenido del espacio de direcciones del proceso original. Mi opinión es que este es un enfoque obsoleto para la creación de procesos y apenas tiene cabida en el mundo de Windows, ya que implica una gran cantidad de problemas de seguridad y la arquitectura del sistema operativo.

Desde el punto de vista de .NET, el problema fundamental con fork() sería el enfoque para duplicar y/o compartir recursos no administrados (manejadores de archivos, objetos de sincronización, manejadores de ventanas (!), Etc.) entre el antiguo y el nuevo proceso. Creo que no hay ningún motivo serio para introducir dicho concepto en .NET o en el sistema operativo subyacente de Windows.

Para más información, consulte el enlace de saurabh.

+0

Una razón seria que puedo pensar es manejar interbloqueos (bifurcación del hilo). Es una idea avanzada. Pero presionar y soltar los estados del hilo (horquilla y dormir el hilo nuevo) junto con el control de versiones de los objetos que se bloquean podría permitirle regresar antes de que pudieran producirse bloqueos. (Nota: los bloqueos bloqueados evitan la corrupción de datos ... puede dejarlos ir a los dos, pero los datos ya no estarán bloqueados de manera exclusiva, incluso si solo se ejecuta un hilo a la vez). Esto nos da objetos atómicos que no se bloquean (incluso el punto muerto de las bases de datos). Esa es una razón seria. – TamusJRoyce

+0

Tenga en cuenta que 'fork' en realidad no proporcionará ningún efecto deseado en .NET. 'fork' no funciona bien con aplicaciones de subprocesos múltiples, provoca que todos los demás subprocesos finalicen. Una aplicación .NET es por definición de subprocesos múltiples porque al menos se está ejecutando un subproceso de GC. – Sebazzz