J'ai une File d'attente de l'objet que j'ai besoin pour s'assurer est thread-safe. Serait-il préférable d'utiliser un verrou de l'objet comme ceci:
lock(myLockObject)
{
//do stuff with the queue
}
Ou est-il recommandé d'utiliser la File d'attente.Synchronisé comme ceci:
Queue.Synchronized(myQueue).whatever_i_want_to_do();
À la lecture de la MSDN docs il est dit que je devrais utiliser la File d'attente.Synchronisé pour en faire thread-safe, mais il donne un exemple d'utilisation d'un verrou de l'objet. De l'article MSDN:
Pour garantir la sécurité des threads de La file d'attente, toutes les opérations doivent être effectuées par le biais de ce wrapper.
L'énumération d'une collection est pas intrinsèquement un thread-safe procédure. Même lorsqu'une collection est synchronisée, les autres threads peuvent toujours modifier la collection, ce qui provoque l'agent recenseur pour lever une exception. Pour garantir la sécurité des threads au cours de l'énumération, vous pouvez verrouiller la collection pendant toute la l'énumération ou intercepter les exceptions résultant des modifications apportées par d'autres les threads.
Si vous appelez Synchronisée() ne garantit pas le fil de sécurité, quel est le point? Suis-je manqué quelque chose?