Тестирование неблокирующей очереди - PullRequest
2 голосов
/ 19 апреля 2010

Я перенес неблокируемый псевдокод очереди здесь на C #. Приведенный ниже код представляет собой почти дословную копию статьи.

Какой подход вы бы использовали для проверки реализации?

Примечание: я работаю в VS2010, поэтому у меня пока нет поддержки CHESS.

Edit:

Я удалил рассматриваемый код, чтобы какой-то ничего не подозревающий разработчик не использовал его - потребовалось немало изменений, чтобы освободить его от ошибок ... и я все еще не был на 100% уверен, что он свободен от ошибок , При тестировании методом грубой силы я не смог заставить его работать лучше, чем решение на основе блокировки.

Кроме того, поскольку я нацелился на 3.5, я подумал, что я SOL с параллельной очередью 4.0. Платформа 3.5 RX включает в себя ConcurrentQueue, так что это было действительно забавное небольшое программирующее упражнение и ничего более.

Ответы [ 2 ]

2 голосов
/ 19 апреля 2010

когда я пытался создать неблокирующую очередь, я тестировал очередь таким образом. я создал 10 потоков и одновременно вызывал Enqueue 1000 раз. В конце я проверил размер очереди, это было! = 10 000. Или иногда это бросало исключения. Затем я попробовал параллельные запросы. Тот же результат. Это ясно означает, что очередь не является потокобезопасной.

2 голосов
/ 19 апреля 2010

Если вы используете VS 2010 и .NET 4, вы можете использовать ConcurrentQueue<T>.

...