Threading in C# by Joseph Albahari habla brevemente sobre ella, declarando:¿Tanto BeginInvoke como EndInvoke en los delegados generan cercas completas?
Los siguientes implícitamente generar vallas completos:
- C# 's instrucción lock (Monitor.Enter/Monitor.Exit)
- Todos los métodos de la clase Interlocked (nos 'll cubrir estas pronto)
- devoluciones de llamada asincrónicas que utilizan el grupo de subprocesos - éstos incluyen delegados asíncronos, devoluciones de llamada de APM, y el Grupo de continuaciones
- Configuración y esperando en una señalización construir
- Cualquier cosa que se basa en la señalización, tales como iniciar o esperando en una tarea
como "delegados" asíncronos se encuentra en la lista, me gustaría suponer que al menos EndInvoke es totalmente cercado. Pero, ¿qué pasa con BeginInvoke? Desafortunadamente no pude F11 (= paso de depuración) en el código BeginInvoke - ¿está la fuente disponible en algún lado? Aunque un enlace a una respuesta definitiva sería aún mejor.
(BeginInvoke es proporcionada por el tiempo de ejecución de su duende; en realidad no hay ninguna fuente como tal) –
¿Quiere decir que desarrollaron esos dos métodos directamente en el código de máquina? ;) Pero honestamente, sería bueno saber si hay algún tipo de garantía en términos de seguridad de hilos, independientemente de si hay una manera de ver las fuentes de MS o no. No pude encontrar ninguna de las palabras "barrera", "valla", "volátil" en las particiones II y IV de los "últimos estándares" o el "borrador de trabajo" que bajé de [http://msdn.microsoft.com/ es-us/netframework/aa569283.aspx] –
No necesariamente código de máquina, C o C++ probablemente. Si realmente quieres verlo, puedes descargar el código fuente Mono para ver cómo lo hicieron. – codenheim