Publicado hace 9 años por --171278--
Portada
mis comunidades
otras secciones
Comentarios
Tienes que asegurar exclusión mutua (https://gallir.wordpress.com/2015/02/17/principios-de-concurrencia-exclusion-mutua/#_exclusión_mutua), o bien los los "locks" de fichero o desde el programa. Si usas mutex (no sé el lenguaje) es:
mutex.Lock();
hacer_el_seek_en_fichero();
escribir();
mutex.Unlock();
#2 Gracias lo iraré, el lenguaje es en python jejeje...
#2 Leído y como con el framework que estoy no puedo usar eso. Podría programarlo yo pero meterme en el framework puede llevarme demasiado he leído tu blog y he seguido la técnica de la panadería.
Bueno conforme acaban voy poniendoles en una array que comparten, inmediatamente después cada uno comprueba si el array ya tiene a todos los participantes. Esto solo ocurrirá cuando el último acabe y se añada. Cuandoestopase pues escriben el fichero.
Seguro que es muy cutre esta solución pero funciona de momento jeje.
#5 ¿Que no puedes usar https://docs.python.org/2/library/mutex.html ?
No lo creo.
#6 uhmmm puede ser...pero ya te digo que por falta de tiempo ...ya lo probaré cuando esté más ddesahogado...de momento el otro apaño vaa '-_-
#7 Pero si no sincronizas los threads de ninguna forma en algún caso (muy excepcional) en el que dos se intentasen añadir a un array al mismo tiempo, se añadirían en la misma posición, sobreescribiéndose. Al menos en lenguajes de bajo nivel, no sé si el python tendrá una operación de añadir a un array que sea threadsafe.
#6 ¿Y si cada usuario ejecutase su tarea en un proceso distinto? (ni idea de cómo compartirían memoria en python pero imposible no será). ¿Cumpliría su función el mutex en ese caso?
#9 usa el lock de POSIX, https://docs.python.org/2/library/posixfile.html
#10 Entonces tienes razón, es lo que hay que usar.
#0 No sé si acabo de entender el planteamiento, pero me tiro al monte:
Entiendo dos procesos separados:
1) El participante X (en paralelo con los otros) realiza una tarea y la termina, o no... (aquí el algoritmo que haga lo que tenga que hacer con la tarea, desde servirla, controlar el tiempo y la respuesta, grabarlas en ficheros independientes, etc.
Y cuando finaliza la ronda (por tiempo, culminación de todas las tareas, etc.)
2) Se cierran las tareas que queden abiertas y se procede a la lectura de todas las tareas y su integración en el fichero único (luego se destruyen los ficheros de las tareas individuales)
#1 Gracias por responder.
Todas las tareas se acaban.
Tenia en mente buscar alguna manera de quienes es el último en acabar. Tal vez usando la memoria que todos comparten. Y entonces el último puede escribir en un fichero los registros de esa ronda.
Pero no se