方法被称为线程!它们是否处于有序堆栈中?

时间:2011-12-02 13:25:33

标签: c#

我有这段代码:

for (int i = 0; i < 10000; i++)
{
    printValue(i);
}

private void printValue(int value)
{
    Console.WriteLine(value);
}

是否有任何情况下打印的数字不符合规定?

我的意思是,方法printValue(60)的线程可能比printValue(50)之前执行? (就像例子一样)。

或者他们是同步的?

3 个答案:

答案 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有线程安全的解决方案,但这应该工作正常: - )