msdn上说使用semaphore可以控制访问公共资源的线程数量,使用releasesemaphore可以使count加1,云云。我的问题是:怎么能知道被控制访问的公共资源是什么啊?它和waitforsingleobject等等待函数是什么关系呢,那位大侠若能举出一浅显易懂的例子来让我这个笨人明白其中的机理,100分相送。我看了一天愣是没整明白这个线程同步和互斥!

解决方案 »

  1.   

    UINT ThreadProc15(LPVOID pParam)

     // 试图进入信号量关口
     WaitForSingleObject(hSemaphore, INFINITE);
     // 线程任务处理
     AfxMessageBox("线程一正在执行!");
     // 释放信号量计数
     ReleaseSemaphore(hSemaphore, 1, NULL);
     return 0;
    }
      

  2.   

    “公共资源”就是指你需要保护的东西CreateSemaphore里可以规定Semaphore的初始信号个数,它的作用是指定Semaphore可以被使用的个数,那么当创好Semaphore之后,当调用WaitForSingleObject后,Semaphore便减一(从初始的个数里减),如果次数已经是0,则WaitForSingleObject会等待
    如果WaitForSingleObject成功了(Semaphore已经减一),不需要保护时,可以调用ReleaseSemaphore,增加Semaphore的个数(因为它原来使用一个个数),这样可以保证别的地方可以继续WaitForSingleObject,它的作用一般就是保护某个资源(或代码)只能被指定个数的单元访问(超出的必须等待)
      

  3.   

    如果还不懂,有本书不错,《Win32 多线程程序设计》,侯捷翻译的