2008-12-06 7 views
30

Tengo datos que deben ejecutarse en una determinada cadena de fondo. Tengo un código proveniente de todos los otros hilos que necesitan invocar esto. ¿alguien tiene un buen tutorial o mejores prácticas en tener una cola para la sincronización para apoyar este requisito roscadoEjemplo de mejor cola de subprocesos/mejores prácticas

Respuesta

8

Usted podría:

+0

El ejemplo de código en el [primer link] (http: // MSDN. microsoft.com/en-us/library/yy12yx1f.aspx) no se recomienda ya que tiene una posible condición de carrera que resulta en señales perdidas. ¡No lo uses! –

1

Una de mis soluciones favoritas para este problema es similar al patrón producer/consumer.

Creo un hilo maestro (prácticamente el Main() de mi programa) que contiene un objeto de cola de bloqueo.

Este hilo maestro hace girar varios hilos de trabajo que simplemente sacan cosas de la hebra de bloqueo central y las procesan. Dado que es una cola de bloqueo segura para la ejecución de los hilos, los bits de sincronización son fáciles: la llamada TaskQueue.Dequeue() se bloqueará hasta que el productor/hilo principal ponga en cola una tarea.

Puede administrar dinámicamente la cantidad de trabajadores que desee o solucionarlos de acuerdo con una variable de configuración, ya que todos simplemente están sacando cosas de la cola, el número de trabajadores no agrega ninguna complejidad.

En mi caso, tengo un servicio que procesa varios tipos diferentes de tasks. Tengo la cola escrita para manejar algo genérico como TaskQueueTask. A continuación, hago una subclase y anulo el método Execute().


También probé el enfoque .NET threadpool donde puedes tirar cosas a la piscina con mucha facilidad. Era extremadamente simple de usar pero también proporcionaba poco control, y no garantizaba el orden de ejecución, el tiempo, etc. Se recomienda solo para tareas livianas.

+0

Aquí hay una cola de bloqueo: http://www.eggheadcafe.com/articles/20060414.asp –

0

Puede probar esta solución. Le muestra cómo implementar el patrón productor-consumidor. También tiene alguna explicación sobre qué se puede hacer con ella. Como diferentes combinaciones de la cantidad de productores y consumidores.

http://devpinoy.org/blogs/jakelite/archive/2009/01/12/threading-patterns-the-producer-consumer-pattern.aspx

http://devpinoy.org/blogs/jakelite/archive/2009/02/03/threading-patterns-producer-consumer-pattern-examples.aspx

+0

ambos enlaces no son válidos ahora. – Lichader

Cuestiones relacionadas