Ver Mensaje Individual
  #1 (permalink)  
Antiguo 12/11/2010, 09:14
daimroc
 
Fecha de Ingreso: octubre-2006
Mensajes: 53
Antigüedad: 17 años, 6 meses
Puntos: 0
Threading: wn un while se me sale de rango

En una clase tengo dos métodos, que son los siguientes:

public void metodo1()
{
int indice = 0;
while(indice<misFicheros.Length)
{

ThreadStart t = delegate { metodo2(misFicheros[indice]); };
new Thread(t).Start();
indice++;
}
}



private void metodo2(string ficheros)
{
//codigo del procesamiento de ficheros
}


El método2 hace unas operaciones sobre el fichero pasado por parámetro.

Cuando ejecuto el programa, entra en el while del método1, y ejecuta un hilo por cada una de las iteraciones del bucle, ya que es lo que quiero, que se haga en paralelo.

Sin embargo, la variable indice llega a tener el valor de la longitud de misFicheros, por lo que en tiempo de ejecución me da un error de que se sobrepasa la longitudo del array.

Por la condición que tengo puesta en el while, no entiendo por qué llega a pasar, ya que he puesto un menor estricto, no un menor igual. Además, cuando se me para la ejecución, si miro el valor que tiene la variable indice, veo realmente que tiene el valor que debería hacer que no entrara de nuevo en el while, pero que sin embargo entra.

Me gustaría saber por qué ocurre esto, ya que la variable indice solo la incremento en el while, no en ningún otro sitio, de hecho es una variable local de metodo1.

Si ese mismo while lo ejecuto pero sin hacer uso del threading, llamando normalmente a metodo2, ese error de sobrepasar el rango del array no me ocurre, por lo que supongo que el problema es por el uso de hilos, pero no sé por qué.

También he probado con un for en lugar de con un while, pero sigue pasando lo mismo, la variable indice se sigue incrementando más allá de la condición del bucle.

También he probado a intentar definir la variable indice como variable de clase, poniéndola el modificador volatile, ya que por lo que he leído que usando hilos a veces no se lee el valor más reciente de la variable, pero sigue pasando lo mismo. En parte lo esperaba, porque esto es si la variable es modificada por alguno de los hilos, pero no es el caso, solo se modifica en el while del método principal.

¿Alguien sabe cual puede ser la solución?



Muchas gracias.
Daimroc.