Привет, я пытаюсь написать список без блокировки, у меня работает добавление, но код, который извлекает объекты из списка, работает не очень хорошо :(
Ну, это не обычный список. У меня есть интерфейс IWorkItem.
interface IWorkItem
{
DateTime ExecuteTime { get; }
bool Cancelled { get; }
void Execute(DateTime now);
}
и у меня есть список, куда я могу добавить это: P, и в идеале, когда я запускаю Get(); в списке он должен зацикливаться, пока не найдет IWorkItem, который
If (item.ExecuteTime < DateTime.Now)
и удалите его из списка и верните его. Я провел тесты со многими потоками на своем двухъядерном процессоре, и кажется, что Add работает до сих пор, но функция Get теряет некоторые рабочие элементы, где я понятия не имею, что не так. ...
ps если я заработаю, любой может использовать код :) ну, вы в любом случае, но я не вижу смысла, когда он прослушивается: P
Код находится здесь http://www.easy-share.com/1903474734/LinkedList.zip, и если вы попытаетесь запустить его, вы увидите, что иногда он не сможет получить столько рабочих элементов, сколько было помещено в список...
Редактировать: у меня есть список без блокировки, работающий быстрее, чем с использованием статуса блокировки (obj), но у меня есть объект блокировки, который использует Interlocked, который все еще опережает список без блокировки, я собираюсь попытаться сделать список без блокировки и посмотреть, если я получите те же результаты там, когда я закончу, я загружу результат сюда ..