On 04/10/2013 19:02, Marco Giusti wrote:
[...]
Senza (troppo) leggere il tuo codice, concettualmente allora è come
avevo descritto nella mia prima email. Supponi che hai i due lock come
ti avevo descritto, il worker si comporta più o meno così:

        def worker():
                while True:
                        path = q.get()
                        if os.path.exists(path) and override is ASK:
                                with w:
                                        global override
                                        override = ask_dialog()
                        with r:
                                copy(path)
                        q.task_done()

questo è a larghe spanne quello che dovrebbe fare. I due lock sono
speciali. r lo puoi acquisire solo se nessuno reclama w. w lo puoi
acquisire solo se nessuno ha acquisito r. Così se due operazioni di
copia sono in atto e una terza vuole sovrascrivere un file, la terza si
blocca fintanto che le due precedenti non sono completate. Nuove
operazioni di copia sono bloccate perché qualcuno reclama w. Quando w
viene rilasciato, i worker possono di nuovo acquisire r.


Supponiamo di avere, nell'ordine, queste richieste di copia

copy a b
copy c d
copy e f

questo significa che la terza operazione, se vuole sovrascrivere f, blocca tutte le altre anche se non hanno nulla a che fare con f?


Ciao  Manlio
_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python

Rispondere a