2011-07-20 8 views
5

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.

+1

(BeginInvoke es proporcionada por el tiempo de ejecución de su duende; en realidad no hay ninguna fuente como tal) –

+0

¿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] –

+0

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

Respuesta

-1

MSDN dice BeginInvoke es multi-hilo: http://msdn.microsoft.com/en-us/library/0b1bf3y3.aspx

hay cuatro métodos en un control que son seguros hilo: invoke, BeginInvoke, EndInvoke y CreateGraphics si el identificador para el control ya ha sido creado

+1

Creo que el autor de la pregunta no estaba preguntando sobre 'Control.BeginInvoke', sino sobre 'BeginInvoke' y' EndInvoke' del 'Delegado'. – paercebal

+0

Siendo threadsafe solo no dice mucho. – CodesInChaos

+1

Sí, en este caso, no estoy interesado en Control.BeginInvoke, pero Begin/EndInvoke en los delegados. –

-1

el código fuente de todo el marco de Microsoft en el Reference Source Website

+0

¿Dónde está exactamente el código fuente de BeginInvoke y EndInvoke? Estoy en .net 3.5SP1, así que busqué en las fuentes de ".NET_3.5_sp1_redist" - no están ahí. Al igual que Marc Gravell, dijo, probablemente esté en las fuentes del tiempo de ejecución en sí, no en la biblioteca .net que se ejecuta en la parte superior (y que podría descargar las fuentes de agradecimiento a su enlace). –

Cuestiones relacionadas