”Жить стало лучше... но противнее. Люди которые ставят точку после слова лучше становятся сторонниками Путина, наши же сторонники делают акцент на слове противнее ( ложь, воровство, лицемерие, вражда )." (с) Борис Немцов
Здравствуйте, VVVa, Вы писали:
VVV>или ещё есть способ удаление из очереди?
Стоит сформулировать лучше что конкретно вам нужно.
Вам точно нужна очередь без блокировок ?
Здравствуйте, VVVa, Вы писали:
VVV>есть возможность просмотреть всю очередь VVV>ToArray(); VVV>а вот удалить просмотренное нету VVV>только TryDequeue VVV>или ещё есть способ удаление из очереди?
Наверное ты имеешь в виду сценарий забрать всё содержимое очереди атомарно. Если так, то можно просто создать новый экземпляр очереди и атомарно его подменить через Exchange, а старый экземпляр спокойно обработать в своём потоке и выкинуть.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Здравствуйте, ·, Вы писали:
·>Здравствуйте, VVVa, Вы писали:
VVV>>есть возможность просмотреть всю очередь VVV>>ToArray(); VVV>>а вот удалить просмотренное нету VVV>>только TryDequeue VVV>>или ещё есть способ удаление из очереди? ·>Наверное ты имеешь в виду сценарий забрать всё содержимое очереди атомарно. Если так, то можно просто создать новый экземпляр очереди и атомарно его подменить через Exchange, а старый экземпляр спокойно обработать в своём потоке и выкинуть.
Тоже сначала хотел такое предложить. Но это плохая идея. Проблема в том, что читатель будет конкурировать с писателями, которые захватили ссылку на старую очередь. Даже если писатели явно не кэшируют ссылку, а читают переменную myQueue перед каждой записью myQueue.Enqueue(), всё равно будет гонка, т.к. внутри Enqueue ссылка на очередь закэширована в this.
VVV>>>есть возможность просмотреть всю очередь VVV>>>ToArray(); VVV>>>а вот удалить просмотренное нету VVV>>>только TryDequeue VVV>>>или ещё есть способ удаление из очереди? SS>·>Наверное ты имеешь в виду сценарий забрать всё содержимое очереди атомарно. Если так, то можно просто создать новый экземпляр очереди и атомарно его подменить через Exchange, а старый экземпляр спокойно обработать в своём потоке и выкинуть. SS>Тоже сначала хотел такое предложить. Но это плохая идея. Проблема в том, что читатель будет конкурировать с писателями, которые захватили ссылку на старую очередь. Даже если писатели явно не кэшируют ссылку, а читают переменную myQueue перед каждой записью myQueue.Enqueue(), всё равно будет гонка, т.к. внутри Enqueue ссылка на очередь закэширована в this.
Ох да, верно. Проглядел! Тогда... disruptor — наше всё! Ну или dequeue поштучно, если производительность не сильно волнует.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай