J'ai un objet file d'attente .NET. Le thread producteur effectue l'opération Enqueue, les données placées dans la file d'attente sont un tableau byte [], tandis que l'autre thread consommateur effectue l'opération Dequeue sur le même objet file d'attente. J'utilise des verrous pour gérer la simultanéité. Mon code semble fonctionner tout le temps, mais hier, des choses bizarres se sont produites. Les données que j'ai obtenues à partir d'un thread consommateur étaient différentes des données que j'ai produites: la longueur du tableau est incorrecte, le tableau est répété ... Cela est-il dû à la protection thread-safe défaillante? À mon avis, la concurrence ne ferait que causer des pertes de données.Que se passerait-il dans un objet file d'attente .NET non sécurisé?
Mon premier message ici, ours avec moi.
Pouvez-vous nous dire quel mécanisme vous utilisez pour verrouiller? par exemple. avec un échantillon de code très court. –
Les problèmes de simultanéité entraînent une corruption ou une incohérence des données. Cela peut être une perte de données, des données répétées, des données corrompues ou même une exception. Ce qui se passe dépend de votre implémentation. Sans voir un exemple de ce que vous faites, personne ne peut avoir une idée de ce qu'est votre problème. – shf301
merci pour vos commentaires! J'utilise simplement moniteur pour faire le "verrou" obtenir { Monitor.Enter (mQueue); octet [] data = mQueue.Dequeue(); Monitor.Exit (mQueue); données de retour; } défini { Monitor.Enter (mQueue); mQueue.Enqueue (valeur); Monitor.Exit (mQueue); } Quel est le problème avec cela? – Sunf71