using System;
using System.Threading;
namespace Namespace1
{
    class C1
    {
        private bool deadlocked = true;        //这个方法用到了lock,我们希望lock的代码在同一时刻只能由一个线程访问
        public void LockMe(object o)
        {
            while (deadlocked)
            {
                deadlocked = (bool)o;
                Console.WriteLine("Foo: I am locked :(");
                Thread.Sleep(500);
            }        }        //所有线程都可以同时访问的方法
        public void DoNotLockMe()
        {
            Console.WriteLine("I am not locked :)");
        }
    }    class Program
    {
        static void Main(string[] args)
        {
            C1 c1 = new C1();            //在t1线程中调用LockMe,并将deadlock设为true(将出现死锁)
            Thread t1 = new Thread(c1.LockMe);
            t1.Start(true);               
        }
    }
}请问高手:程序的执行结果是不断输出"Foo: I am locked :(",而在C++中不会不断输出这个结果的,因为操作系统没有给t1线程分配时间片,主函数就退出了。不过在C#中,怎么操作系统一直给t1线程分配时间?我不太明白。

解决方案 »

  1.   

    没看到将deadlocked 置为false的地方啊!!!
      

  2.   

    请问高手:程序的执行结果是不断输出"Foo: I am locked :(",而在C++中不会不断输出这个结果的,因为操作系统没有给t1线程分配时间片,主函数就退出了。不过在C#中,怎么操作系统一直给t1线程分配时间?我不太明白。
      

  3.   

    我不是指什么lock的用法,这个是我随便网上找来的列子,这个代码如果用C++来写的话,效果完全不同,因为t1线程根本没有被执行。
      

  4.   


    #include <windows.h>
    #include <iostream.h>DWORD WINAPI Fun1Proc(
      LPVOID lpParameter  
    );
    void main()
    {
    HANDLE hThread1;
    hThread1=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);
    CloseHandle(hThread1); cout<<"Main threading running"<<endl;
    //Sleep(10);
    }DWORD WINAPI Fun1Proc(
      LPVOID lpParameter  
    )
    {
    cout<<"thread1 is running"<<endl;
    return 0;
    }写不写Sleep(10)效果大不一样。
      

  5.   

    写Sleep(10)线程会释放当前的cpu ,这样有可能别的线程会得到cpu注意 是"可能"
      

  6.   

    也就是说主线程sleep后 Fun1Proc有可能会运行