在一个进程当中,假设类A有多个实例在多个不同的线程里面同时执行A的函数.由于多个A对象共享代码区(即多个类实例实际调用同一个函数),为了数据保证同步,就需要在定义A函数的时候写入一些同步代码.
大家能否具体举个例子来说明如果不写入这些同步代码.为什么会导致数据混乱.我希望大家能从机器内部执行机制上来分析原因。解释清楚立刻结帖.谢谢.

解决方案 »

  1.   

    不同步当然不行,想像是CPU是怎么执行指令的就知道了。
      

  2.   

    不同步当然不行,想像是CPU是怎么执行指令的就知道了。
      

  3.   

    在程序中使用多线程时,一般很少有多个线程能在其生命期内进行完全独立的操作。更多的情况是一些线程进行某些处理操作,而其他的线程必须对其处理结果进行了解。正常情况下对这种处理结果的了解应当在其处理任务完成后进行。  如果不采取适当的措施,其他线程往往会在线程处理任务结束前就去访问处理结果,这就很有可能得到有关处理结果的错误了解。例如,多个线程同时访问同一个全局变量,如果都是读取操作,则不会出现问题。如果一个线程负责改变此变量的值,而其他线程负责同时读取变量内容,则不能保证读取到的数据是经过写线程修改后的。  为了确保读线程读取到的是经过修改的变量,就必须在向变量写入数据时禁止其他线程对其的任何访问,直至赋值过程结束后再解除对其他线程的访问限制。象这种保证线程能了解其他线程任务处理结束后的处理结果而采取的保护措施即为线程同步。
    ------copy from internet
      

  4.   

    其实共享函数代码里加保护 更 其他地方加 都是一个道理。 
     比如: public class A { 
    public void ShareFun(){
             Lock();  // 这里保护的是  obj  
           class ShareObject  obj = ShareObject.CreateSingle();
            UnLock();
                          }
                         }  
      public class TThread
     {
       A  a;
         TThread(proc proc,A pA)
         {
    a = pA ;
           }
        public Run() {
           Lock();//这个加保护 只是保护了  a  ,防止其他地方调用 这个  a 
           {  
               a.ShareFun();
             }
              UnLock();
                    
           }
    }  int main() {
         TThread t[5];
          A  a[5];
       for(int i=0;i<5;i++)
          t[i]  =new TThread(a[i]);
      for(int i=0;i<5;i++)
        t.Run();
     
    }
      

  5.   

    to cenchure(达到),不好意思你玩来一步,已经结贴了.