Threads rapidos... Demasiado rapidos

23/02/2006 - 15:38 por Bodescu | Informe spam
Hola a la comunidad:

Mi problema es conseguir que se coordinen los threads:

Utilizo un thread lanzadera, para llamar a un metodo al que hay que
pasarle parametros. Inmediatamente despues de lanzado el metodo que pasa
los params, estos deben actualizar su valor.

El caso es que la creacion de los hilos es tan rapida que no da tiempo a
los parametros a actualizar su valor, y me crea varios hilos iguales...

Se os ocurre alguna idea?

Gracias

Preguntas similare

Leer las respuestas

#16 Octavio Hernandez
25/05/2006 - 00:41 | Informe spam
Francisco,

Por cierto, el código que existe dentro de mi public void , la cual se
ejecutará en un thread, puede llamar a cualquier otro método de otra clase
y
sin importar de tipo que sea, osea que devuelva algún valor o no?!

Existe algún tipo de restricción en este sentido?



En principio no importa la "firma" de parámetros que tenga el método
llamado, lo importante es que sea "thread safe", o sea, que se comporte
correctamente en un ambiente de múltiples hilos. Todas las clases de la
librería de .NET tienen en la ayuda un punto "Thread safety" (yo tengo el VS
en inglés) que te indica si se comportan bien o no.

En cuanto a las clases creadas por tí, tus métodos estáticos son seguros
siempre que dependan únicamente de variables locales y parámetros pasados
por valor, porque éstos se almacenan en la pila y cada hilo tiene su propia
pila. En este caso también se dice que el método es reentrante (se puede
entrar a él varias veces desde diferentes hilos).

Estos problemas son realmente difíciles de depurar.

Un consejo inicial que te doy es que en tu clase pongas una variable
estática y la utilices como objeto de bloqueo dentro de
subirCarpetaDescomprimida():

{
// ...
private static string semáforo = "MI SEMAFORO";

public static void subirCarpetaDescomprimida()
{
lock(semáforo)
{
// AQUI EL CUERPO DEL METODO
}
}
}

y ejecutes el programa. El objeto "semáforo" hace que solo ejecute el cuerpo
del método un hilo a la vez. Si así el programa te funciona correctamente,
es que tienes algún problema con la thread safety de las cosas que tienes en
subirCarpetaDescomprimida().

Salu2 - Octavio
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida