Parece haber mucho que aprender acerca de la programación multiproceso y es un poco intimidante.¿La forma más simple de hacer que todo un método sea seguro para subprocesos?
Para mis necesidades actuales, sólo quiero para proteger contra un método que se llama de nuevo desde otro hilo antes de que termine, y mi pregunta es:
¿Es esta una forma adecuada (seguro) para hacer una método de seguridad de subprocesos?
class Foo
{
bool doingWork;
void DoWork()
{
if (doingWork) // <- sophistocated thread-safety
return; // <-
doingWork = true;
try
{
[do work here]
}
finally
{
doingWork = false;
}
}
}
Si eso no es suficiente, ¿cuál es la forma más sencilla de lograr esto?
EDIT: Más información sobre el escenario:
No es sólo una instancia de Foo
Foo.DoWork() se llamará a partir de un hilo en el ThreadPool Evento transcurrido de de un System.Timers.Timer.
Normalmente Foo.DoWork() terminará millones de años antes de que la próxima vez que es llamada , pero quiero codificar la pequeña posibilidad de que se ejecutará siempre, y llamará de nuevo antes de terminar.
(Yo tampoco soy lo suficientemente inteligente como para estar seguro de si esta cuestión podría ser etiquetado independiente del idioma, por lo que no tienen. Lectores ilustrados, se sienten en libertad de hacerlo si procede.)
¿Es un objeto de tipo Foo instanciado para cada subproceso o se comparte en varios subprocesos? – NotMe
Proporcione más detalles sobre el código que método call dowork, ¿hay múltiples hilos? – sll
Respalda la compatibilidad o diseña tu código para que no pueda suceder.Simplemente rescatar cuando sucede no es probable que sea la solución correcta. Pero su edición deja en claro que la seguridad del hilo es en realidad el problema más que la reentrada. –