【发布时间】:2011-03-28 20:13:37
【问题描述】:
我有一个应用程序使用来自不同线程的集合,在本例中为队列。一个对象在一个线程中入队,而另一个在另一个线程中出队。
当重新定义集合计数器时,这些操作可能会同时发生,这些操作将解决异常,例如参数超出范围异常。
我正在寻找一种“好看”以及为什么要相互排除这些操作。
-
我所说的“好看”是指我不想创建自己的集合,该集合派生自包含锁定(对象)机制的集合
-
我不想使用我的头脑风暴的想法,这很“丑陋”
enqueueOk = false;
while (!enqueueOk)
{
try
{
Qsockets.Enqueue(currentSoc);
enqueueOk = true;
}
catch { }
}
我当然想使用锁或互斥锁,但只有当我将这些操作包装在一个将从每个线程调用的过程中,并决定入队或出队时,才会出现这种情况。 “丑”
编辑:
因为似乎没有人在下面看到我的答案
我只是在集合本身上使用了锁定机制
lock(Qsockets)
{
Qsockets.Enqueue(currentSoc);
}
【问题讨论】:
标签: c# multithreading mutual-exclusion