我有这段代码:
for (int i = 0; i < 10000; i++)
{
printValue(i);
}
private void printValue(int value)
{
Console.WriteLine(value);
}
是否有任何情况下打印的数字不符合规定?
我的意思是,方法printValue(60)的线程可能比printValue(50)之前执行? (就像例子一样)。
或者他们是同步的?
答案 0 :(得分:6)
据我所知,从这个片段中只有一个线程,它顺序执行printValue
函数调用。所以没有同步问题,因为只有一个线程。
答案 1 :(得分:1)
如果你的循环在一个由多个线程调用的函数中:
private void Foo()
{
for (int i = 0; i < 10000; i++)
{
printValue(i);
}
}
然后绝对不能保证每个线程的值将按顺序显示。
答案 2 :(得分:1)
如何调用循环?这决定了如何调用printValue方法。如果你在2个并行任务中调用循环,输出肯定会混淆!
为了确保输出总是正确的顺序,你必须让代码的敏感部分“线程安全”。有关线程同步的更多信息,请查看http://www.albahari.com/threading/part2.aspx。
试试这个以获得“线程安全”
public class SomeClass{
private static object lockObject = new object();
public void Foo(){
lock(lockObject){
for (int i = 0; i < 10000; i++)
{
printValue(i);
}
}
}
private void printValue(int value)
{
Console.WriteLine(value);
}
}
Offcourse有线程安全的解决方案,但这应该工作正常: - )