我是多线程的新手,我用一个非常简单的代码获得了意想不到的结果:
SELECT * FROM fts_table WHERE fts_table MATCH 'A:XXX OR B:YYY'
有人可以解释为什么上面的代码会将其打印到控制台窗口吗?
线程#3
线程#3
线程#3
线程#6
线程#6
线程#8
线程#9
线程#10
线程#11
线程#11
答案 0 :(得分:4)
这是因为您正在使用closes over the loop variable的lambda。
重构您的代码:
public void Run()
{
for (int i = 0; i < 10; i++)
{
int j = i;
Thread t = new Thread(() => myFun((j + 1)));
t.Start();
}
}
private void myFun(int threadNo)
{
Console.WriteLine("Thread #" + threadNo.ToString());
}
并享受变化。
答案 1 :(得分:0)
你可以像Jesse建议的那样在循环中使用“local”变量,或者你可以改为使用参数化的start(ParameterizedThreadStart):
...
\section{Section}
<<echo=FALSE, results="asis">>=
for (i in 1:3) {
# here I want to insert a subsection with a title contating for instance x^i
plot(i:(i*10), col=i)
}
@
...