【发布时间】:2018-03-13 10:24:15
【问题描述】:
我在下面有一个示例代码,它创建了 多线程,在单独的线程中 lock 中有一个代码块。
如果响应为空或autoReset.WaitOne(timeout) 超过时间跨度,我将中止子线程,以便允许队列中的下一个等待线程
输入lock并进行操作。但这里的问题是,如果说 ThreadA 需要 8 秒来执行 lock 中的复杂代码,那么接下来
等待线程说 ThreadB 只剩下 2 秒 (因为所有线程的 AutoResetEvent's 等待时间是同时启动的)。
如何让每个线程获得相同的时间跨度来执行复杂的代码块。我正在尝试从过去 2 天开始解决这个问题,任何输入都会非常有帮助。
Class A
{
static void Main(){
for(int i=0; i < 2; i++)
{
var mainThread = new Thread(ParentThreadMethod);
mainThread.Start();
}
}
void ParentThreadMethod(){
var autoReset = new AutoResetEvent(false);
ClassB obj;
var childThread = new Thread(() =>
{
obj = new ClassB();
var result = obj.ChildThreadMethod();
autoReset.Set();
}
childThread.Start();
// wait for 10sec
autoReset.WaitOne(10000);
}
}
Class B
{
private static readonly object threadLock = new object();
string ChildThreadMethod(){
lock (threadLock)
{
// complex logic taking 8sec
}
}
}
【问题讨论】:
标签: c# multithreading autoresetevent