using System;
using System.Threading;public class CH3_3
{
Thread[] threads;
int whichThread;
int runCount;
public void CheckThread()
{
lock(this)
{
runCount++;
Console.WriteLine("Run Count {0}",runCount);
if(runCount > 4)
{
Console.WriteLine("Which Thread {0}",whichThread);
threads[whichThread].Abort();
runCount = 0;
whichThread++;
}
}
}
public void RunThread()
{
Boolean done = false;
while(!done) 
{
CheckThread();
}
}
public void StartThreads() 
{
threads = new Thread[3];
runCount = 0;
whichThread = 0;
for(int i =0; i<3; ++i) 
{
threads[i] = new Thread(new ThreadStart(RunThread));
threads[i].Start();
}
}
public static void Main()
{
CH3_3 app = new CH3_3();
app.StartThreads();
}
}运行结果是这样的:RunCount怎么到6的?

解决方案 »

  1.   

    运行结果:
    Run Count 1
    Run Count 2
    Run Count 3
    Run Count 4
    Run Count 5
    Which Thread 0
    Run Count 6
    Which Thread 0
    Run Count 1
    Run Count 2
    Run Count 3
    Run Count 4
    Run Count 5
    Which Thread 1
    Run Count 6
    Which Thread 1
    Run Count 1
    Run Count 2
    Run Count 3
    Run Count 4
    Run Count 5
    Which Thread 2
    Press any key to continue
      

  2.   

    楼主的结果没错啊 就是这个啊
    if(runCount > 4) runCount  退出循环
      

  3.   

    我给的结果是没错的 但是为什么which Thread 0出现两次;而且Run Count 6会出现
      

  4.   

    按我的思想 ,运行结果应该是这样的啊!怎么回事
    Run Count 1 
    Run Count 2 
    Run Count 3 
    Run Count 4 
    Run Count 5 
    Which Thread 0 
    Run Count 1 
    Run Count 2 
    Run Count 3 
    Run Count 4 
    Run Count 5 
    Which Thread 1 
    Run Count 1 
    Run Count 2 
    Run Count 3 
    Run Count 4 
    Run Count 5 
    Which Thread 2 
    Press any key to continue
      

  5.   

    你忽略了Abort的作用。
    threads[whichThread].Abort();
    runCount = 0;
    whichThread++;你仔细想想,后两句是否能被保证执行?
    改成这样,大概可以得到你想要的结果。
    runCount = 0;
    whichThread++;
    Thread.CurrentThread.Abort();
      

  6.   

    threads[whichThread].Abort();这句的意思是终止线程,也就是不在执行线程,也就不会再继续执行下面的语句,要想验证很简单,你在程序上加个断点,调试看下,就知道是怎么回事了,看能不能执行到
    runCount = 0;
    whichThread++;
      

  7.   

    线程的运行顺序是未知的
    出现6的原因可以能是
    你在生成3个线程的时候的···你开始生成的线程运行过不只1次·可能是1,2,3,4.。。次····· 
    你Count是全局的··所以就肯定不值3··· public void CheckThread()
        {
            lock(this)
            {
                runCount++;
                Console.WriteLine("Run Count {0}",runCount);
                if(runCount > 4)
                {
                    Console.WriteLine("Which Thread {0}",whichThread);
                    threads[whichThread].Abort();
                    runCount = 0;
                    whichThread++;
                }
            }
        }改为: public void CheckThread()
        {
            Monitor.Enter(this);
           {
                runCount++;
                Console.WriteLine("Run Count {0}",runCount);
                if(runCount > 4)
                {
                    Console.WriteLine("Which Thread {0}",whichThread);
                    threads[whichThread].Abort();
                    runCount = 0;
                    whichThread++;
                }
            }
        }
      

  8.   

        public static void Main()
        {
            CH3_3 app = new CH3_3();
            app.StartThreads();
    Monitor.Enter(app);
        }建议一般不要lock(this)
      

  9.   

    其实我的本意是想看下lock的应用,只是输出结果实在有点不解,那这个问题就这样了