我有以下代码启动一些线程:
List<Stuff> lNewStuff = new List<Stuff>();
// populate lNewStuff
for (int i = 0; i < accounts.Length; i++)
{
Account aTemp = _lAccounts.Find(item => item.ID == accounts[i]);
Thread tTemp = new Thread(() => aTemp.ExecuteMe(lNewStuff));
tTemp.Start();
}
然后在 Account 类中你有一个有锁的 ExecuteMe 方法:
public class Account
{
private Object lockThis = new Object();
public void ExecuteMe(List<Stuff> lNewStuff)
{
//Ensure only one thread at a time can run this code
lock (lockThis)
{
//main code processing
}
}
}
现在,有时线程以 lNewStuff == null 开头,因为它有时找不到任何具有帐户 ID 的新东西。这对这个项目来说是正常的。该线程应始终尝试运行,但是当为 null 时,我希望该线程终止,而不是在遇到锁时等待。
所以具体来说:
如果 lNewStuff 为 null 并且存在锁,则终止线程。(这个怎么做?)
如果 lNewStuff 为 null 并且没有锁,则正常运行(已经这样做了)
如果 lNewStuff 不为空并且有锁,则等待锁完成(已经这样做了)
如果 lNewStuff 不为空并且没有锁,则正常运行(已经这样做了)