elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Multi Threads y Creación de archivos.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Multi Threads y Creación de archivos.  (Leído 2,645 veces)
Xephiro

Desconectado Desconectado

Mensajes: 239



Ver Perfil WWW
Multi Threads y Creación de archivos.
« en: 24 Abril 2015, 18:46 pm »

Estimados,

Tengo un problema para crear archivos de forma paralela.

tengo 5 hilos para crear N archivos (siempre sobre 10), pero por algún motivo no funciona como creo.

Dejo parte del código para explicarme mejor:

Primero creao los hilos y les doy la función con sus parametros a ejecutar (primer for) y luego los ejecuto cada uno de ellos (segundo for)

Código
  1. Thread[] ThreadsPool = new Thread[inter];
  2.            for (int i = 0; i < inter; i++)
  3.            {
  4.                ThreadsPool[i] = new Thread(() => Func1(start, end, i));
  5.            }
  6.  
  7.            for (int i = 0; i < inter; i++)
  8.            {
  9.                ThreadsPool[i].Start();
  10.            }

A continuación muestro parte de la Func1

Código
  1. private static void Func1(long initial, long final, int index)
  2.        {
  3.            try
  4.            {
  5.                semaphore.WaitOne();
  6.                ....
  7.  
  8.                stream = File.Create("D:/temp_"+i+".tmp"); // LINEA CON PROBLEMAS
  9.                do
  10.                {
  11.                    ....
  12.                }
  13.                while (...);
  14.            }
  15.            finally
  16.            {
  17.                semaphore.Release();
  18.            }
  19.        }
  20.  

Estoy utilizando un semaforo de capacidad 5, pero por algún motivo cuando ejecuto los threads, siempre tratan de crear el mismo archivo, por lo que el programa cae ya que mas de un hilo trata de sobre escribir al mismo tiempo.

Intente con un lock justo en ese tramo, pero el error se mantiene.

¿Alguna idea de que puede ser? ya que si comento la línea para crear el archivo el resto del código que tengo se ejecuta sin ningun problema.


« Última modificación: 24 Abril 2015, 18:54 pm por kub0x » En línea

kub0x
Enlightenment Seeker
Moderador
***
Desconectado Desconectado

Mensajes: 1.486


S3C M4NI4C


Ver Perfil
Re: Multi Threads y Creación de archivos.
« Respuesta #1 en: 24 Abril 2015, 19:00 pm »

Buenas,

¿podrías aportar el mensaje de error obtenido al recibir la excepción? Por lo que veo cada thread recibe un identificador distinto asi que no veo problema alguno en la creación de los archivos ya que todos tendrían nombres distintos.

Por cierto, tienes que cerrar el stream(FileStream) después de trabajar con él. Aporta más código y te ayudaremos.

Saludos.


En línea

Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate

Xephiro

Desconectado Desconectado

Mensajes: 239



Ver Perfil WWW
Re: Multi Threads y Creación de archivos.
« Respuesta #2 en: 24 Abril 2015, 19:05 pm »

Buenas,

¿podrías aportar el mensaje de error obtenido al recibir la excepción? Por lo que veo cada thread recibe un identificador distinto asi que no veo problema alguno en la creación de los archivos ya que todos tendrían nombres distintos.

Por cierto, tienes que cerrar el stream(FileStream) después de trabajar con él. Aporta más código y te ayudaremos.

Saludos.

El mensaje que arroja es el siguiente:

Citar
"El proceso no puede obtener acceso al archivo 'D:\\temp_30.tmp' porque está siendo utilizado en otro proceso."

Esto ya me resulta extraño, ya que aun pasando indices a cada hilo, por algún motivo tratan de acceder a un mismo varios hilos.
En línea

kub0x
Enlightenment Seeker
Moderador
***
Desconectado Desconectado

Mensajes: 1.486


S3C M4NI4C


Ver Perfil
Re: Multi Threads y Creación de archivos.
« Respuesta #3 en: 24 Abril 2015, 19:18 pm »

Es preferible que utilizes el bloque "using" ya que por defecto implementa la interfaz IDisposable utilizada para liberar los recursos del stream.

Código
  1. using (StreamWriter sw = new StreamWriter("D:/temp_"+i+".tmp"))

Sino pega el code y le echamos un vistazo.

Saludos.
En línea

Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.885



Ver Perfil
Re: Multi Threads y Creación de archivos.
« Respuesta #4 en: 24 Abril 2015, 22:31 pm »

Intente con un lock justo en ese tramo, pero el error se mantiene.

Buenas

Deberías mostrar el código de ese intento que mencionas para poder analizar de que manera probaste a sincronizar los sub-procesos para evitar que ninguno de ellos ejecute el código del bloque utilizando la clausura SyncLock cómo has dicho haber intentado, pues podrías haberlo implementado incorrectamente.

De todas formas, y suponiendo que lo hayas hecho correctamente, también deberías mostrar todo el código referente al Stream ya que cabría la posibilidad de que no estés liberando ese flujo de datos, y cómo ya ha comentado @Kubox, debes cerrarlo o bien utilizando la clausura Using o también puedes utilizar un bloque Try/Catch/Finally para asegurarte de que al final de la ejecución de ese bloque llamas al método Stream.Dispose o en su defecto Stream.Close (el cual por defecto llama a Stream.Dispose).

Saludos
En línea



Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Creacion de archivos en VB.
Multimedia
Ar_mx 1 1,604 Último mensaje 2 Abril 2006, 19:24 pm
por .:CorTeX:.
Multi threads con winsock o multiconexion
Programación Visual Basic
LeandroA 7 7,665 Último mensaje 9 Diciembre 2009, 15:30 pm
por ssccaann43 ©
Threads + Archivos de Acceso Aleatorio y demas yerbas...
Ejercicios
agusCarBan 0 3,988 Último mensaje 2 Junio 2009, 20:24 pm
por agusCarBan
Auditar fecha creación archivos
Windows
narmer 2 2,425 Último mensaje 4 Febrero 2014, 11:21 am
por narmer
Problemas con la creación de archivos en C
Programación C/C++
k-mm 2 2,386 Último mensaje 5 Julio 2017, 01:47 am
por k-mm
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines