Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Mais aussi sur les technos front comme React, Angular, Typescript et Javascript en général.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

Variable booléenne partagée entre threads sans Lock, thread-safe ou pas ?

+4 votes

Je développe un programme qui télécharge des fichiers par HTTP. Ces fichiers peuvent être lourds, et donc les requêtes peuvent prendre plusieurs minutes.
L'utilisateur doit pouvoir arrêter un téléchargement à tout moment.

Chaque opération de téléchargement est lancée dans un thread séparé.
Pour chaque opération, une variable cancel est partagée entre le thread appelant et l’exécutant. Le thread de téléchargement vérifie périodiquement l'état de cette variable, pour couper au plus tôt la connexion.

Ma question est: Puis-je me passer de Lock sans danger ?

Je sais qu'il est habituellement nécessaire de protéger les états partagés pour éviter les races conditions. Cependant, dans ce cas, je n'en voit pas l'utilité: il n'y a qu'un seule thread qui va écrire la variable, donc pas de conflit possible à ce niveau. Et la lecture ne peut pas me donner autre chose que True ou False. Au pire, le téléchargement va faire une boucle de plus.
Mais je suis peut-être passé a coté de quelque chose ?

Questions bonus:
Qu'en est-il des autres implémentations de Python (s'il y a des différences) ?
Et avec des processus ?

demandé 16-Avr-2015 par BAKfr (156 points)

1 Réponse

+2 votes

Je dirais que dans ton cas çà ne doit pas être un probleme. Çà le serait si tu faisait du coupound assignment (+= , -=, &=, etc)

Après il y a de objets pour gérer ce genre de chose : threads events

répondu 17-Avr-2015 par jc (2,704 points)

+1 : si un seul thread écrit dans la variable, aucun problème.

...