嗨,我正在尝试编写一个无锁列表,我认为添加部分正在工作,但是从列表中提取对象的代码不起作用:(
那么这个列表不是一个普通的列表..我有接口 IWorkItem
interface IWorkItem
{
DateTime ExecuteTime { get; }
bool Cancelled { get; }
void Execute(DateTime now);
}
好吧,我有一个列表,我可以在其中添加这个:P,理想的是当我运行 Get(); 在列表上它应该循环它,直到它找到一个 IWorkItem
If (item.ExecuteTime < DateTime.Now)
并将其从列表中删除并返回..我在我的双核 cpu 上运行了许多线程的测试,似乎 Add 工作到目前为止从未失败,但是 Get 函数丢失了一些我不知道有什么问题的工作项.. ...
ps如果我得到这个工作,任何人都可以免费使用代码:)好吧,你是任何方式,但我不明白它被窃听时的重点:P
代码在这里http://www.easy-share.com/1903474734/LinkedList.zip如果您尝试运行它,您会发现它有时无法获得与它放入的一样多的工作项列表...
编辑:我有一个无锁列表工作它比使用 lock(obj) 语句更快,但我有一个使用 Interlocked 的锁对象,它仍然优于无锁列表,我将尝试制作一个无锁数组列表,如果我当我在这里完成上传结果时得到相同的结果..