2010-04-19 3 views
2

J'ai porté la file d'attente non bloquante psuedocode here en C#. Le code ci-dessous est destiné à être une copie quasi textuelle du document.Test d'une file d'attente non bloquante

Quelle approche adopteriez-vous pour tester la mise en œuvre?

Remarque: Je cours sous VS2010 donc je n'ai pas encore de support CHESS.

Edit:

J'ai supprimé le code en question pour un certain développeur sans méfiance ne l'utilise pas - il a fallu quelques changements pour l'obtenir bug ... et je n'étais toujours pas 100 % confiant que c'était sans bug. Avec le test de force brute, je ne pouvais pas obtenir une meilleure performance qu'une solution basée sur un verrou.

En outre, comme je cible 3,5, je pensais que j'étais SOL avec la file d'attente simultanée 4.0. Le framework 3.5 RX inclut un ConcurrentQueue donc c'était juste un petit exercice de programmation amusant et rien de plus.

Répondre

2

Si vous utilisez VS 2010 et .NET 4, vous pouvez utiliser ConcurrentQueue<T>.

+3

la question était de savoir comment tester leur implémentation. – Andrey

+1

Oui, mais si le port est évitable, et vous pouvez obtenir une mise en œuvre testée, gratuitement, il va éviter la raison de la question entièrement ... –

+0

Malheureusement, je cible .NET 3.5. J'ai effectivement jeté un coup d'oeil à leur implémentation de .NET 4.0 dans le réflecteur et la file d'attente en question adopte une approche complètement différente; C'est l'algorithme recommandé par Joe Duffy dans son article Parallel Data Structures ... – jsw

2

Lorsque j'ai essayé de créer une file d'attente non bloquante j'ai testé la file d'attente de cette façon. J'ai créé 10 threads et simultanément appelé Enqueue 1000 fois. A la fin j'ai vérifié la taille de la file d'attente, c'était! = 10 000. Ou parfois, il a jeté des exceptions. Ensuite, j'ai essayé dequesques simultanées. Même résultat Cela signifie clairement que la file d'attente n'est pas thread-safe.

Questions connexes