Hug*_*une 6 c# queue concurrency multithreading locking
ConcurrentQueue仅当满足某些条件时,如何才能将 a 的下一个元素出队?
例如,如果下一个要出列的项目满足特定条件,则将其出列,否则保留它。本质上是一个'DequeueIf'or'TryDequeueIf'方法
例子:
var myQueue = new ConcurrentQueue<int>()
...
int item;
// only dequeue if the next item is 0
bool success = myQueue.TryDequeueIf(out item, x=>x==0)
Run Code Online (Sandbox Code Playgroud)
当然可以先调用TryPeek,检查条件,然后再调用TryDequeue,但这不再是线程安全的。
我可以将整个封装TryPeek & TryDequeue在一个锁中,但这有点违背了使用 ConcurrentQueue 的目的;并意味着所有常规无条件出队也必须被锁定。我不确定我是否需要锁定每一个Enqueue才能保存。如果可能的话,我想避免实现我自己的锁定策略时可能遇到的陷阱。
ConcurrentQueue是否有使用 .net4.0类或其他并发类之一的无锁解决方案?
使用内置方法这是不可能的。该怎么办?
| 归档时间: |
|
| 查看次数: |
3131 次 |
| 最近记录: |