Si je génère un thread avec ThreadPool.QueueUserWorkItem et que ce thread ne fait pas référence à l'objet qui n'est pas thread-safe, est-ce qu'il compromettrait cet objet non-thread-safe? [Edit] En tant qu'objet non thread-safe, je veux dire une interface tierce à un automate programmable qui n'a pas la capacité d'ouvrir des connexions simultanées ou un support de simultanéité. Je suppose que je voulais juste être sûr qu'en mettant en file d'attente des threads dans la même classe que ma référence à cet objet, je ne compromettreais pas sa sécurité de thread d'une manière que je n'avais pas réalisée.Les threads de mise en file d'attente affectent-ils des objets non thread-safe dans la même classe?
Les threads de mise en file d'attente affectent-ils des objets non thread-safe dans la même classe?
Répondre
Les fils ne sont pas magiques. Si elles ne référencent pas certaines données, elles ne peuvent pas l'affecter.
EDIT: Si vous avez du code qui surveille la création de nouveaux threads, et surveille QueueUserWorkItem, et si le moniteur modifie ces objets non thread-safe, alors oui, il y a un impact.
Sinon, non.
Tant qu'un nouveau thread ne référence pas directement ou indirectement un objet non-thread-safe, il ne l'affectera pas.
Petit point technique. L'appel de ThreadPool.QueueUserWorkItem ne génère pas nécessairement un nouveau thread. Il garantit à la place que le délégué fourni sera exécuté sur un thread différent. Cela peut entraîner la création d'un thread, ou le cas le plus probable est qu'il utilisera un thread existant déjà alloué au pool de threads.