private int i;
public void test()
{
   i+=100;
}

解决方案 »

  1.   

    MSDN每个类都会有这样一段:
    线程安全
    此类型的所有公共静态(Visual Basic 中为 Shared)成员对多线程操作而言都是安全的。但不保证任何实例成员是线程安全的。希望哪个高手给解释一下?
      

  2.   

    MSDN每个类都会有这样一段:
    线程安全
    此类型的所有公共静态(Visual Basic 中为 Shared)成员对多线程操作而言都是安全的。但不保证任何实例成员是线程安全的。希望哪个高手给解释一下?
      

  3.   

    如果希望不产生问题可以使用线程同步,线程同步是一种确保不同线程协调其对共享资源(如:控制台)的访问方式,实现同步,在C#中用lock提供,锁机制确保同一时间只有一个线程可以访问某个方法或代码.
    如:
    class Test
    {
       static void Main()
        {
            Test objTest=new Test();
            Thread newThread=new Thread(new ThreadStart(objTest.threadToRun));
            newThread.Start();
            tbjTest.threadToRun();        
        }
      void threadToRun()
      {
        lock(this)
       for(int i=0;i<100;i++)
       {
          Console.WriteLine("线程数为:{0}",i)
        }
      }}
      

  4.   

    lock(this)应该将该对象实例的所有方法都锁定吧?
    还是只锁定threadToRun方法
      

  5.   

    lock(this)应该将该对象实例的所有方法都锁定吧?
    还是只锁定threadToRun方法
      

  6.   

    这个在专门讲多线程的书中都是要详细讨论的问题,一般会有好多这样的例子。
    比如很简单的一个公共方法:
    void aMethod()
    {
        FieldOne = aStaticField;
        aStaticField++;
        FieldTwo = aStaticField;
    }
    直观上感觉,运行后 FieldTwo == FieldOne + 1 。
    但如果你在两个线程中调用,两个线程的执行顺序是不一定的,那样就会出现非期望的结果。
    比如两个线程以下面这样的顺序执行:
    FieldOne = aStaticField; // 线程1
    FieldOne = aStaticField; // 线程2
    aStaticField++;          // 线程1
    aStaticField++;          // 线程2
    FieldTwo = aStaticField; // 线程1
    FieldTwo = aStaticField; // 线程2
    这样 FieldTwo == FieldOne + 2 ,这不是我们想要的。
    当然这样的情况在我们单CPU的机器上也许永远都不会发生,但它的确存在,尤其是多CPU的机器上。
    要处理这样的问题,就像楼上们说的,加锁就行了。这方面的知识在操作系统教材和多线程的书上都会有讲,是线程同步的问题。
      

  7.   

    我想vc中的事件、信号量、互斥对象、临界区,在c#中应该还是差不多的吧!
      

  8.   

    ncucf(ncu晨风)
    能具体说一下吗?
      

  9.   

    呵呵,我对vc里面的多线程操作还算清楚,c#中的,还没真正接触啊!