void Thread1
{
    EnterCriticalSection(&cs);
    //全局资源操作
    LeaveCriticalSection(&cs);
}void Thread2
{
   while(true)
  {
     EnterCriticalSection(&cs);
    //全局资源操作
     LeaveCriticalSection(&cs);
  }
}
这2个线程启动后,Thread1至多只能运行一次,全被Thread2抢去了,如何控制优先级,让Thread2里的LeaveCriticalSection(&cs);后让Thread1里的EnterCriticalSection(&cs)响应,而不是Thread2里的。

解决方案 »

  1.   

    让Thread2用Sleep可以,但这样似乎不是好的编程风格吧
      

  2.   

    自己再顶一下,加个标记值也行,但会造成Thread2一段时间的无限循环,感觉也不是好的编程风格。
      

  3.   

    线程调度是OS的事,但是如果你想这样的话,可以进行线程同步
    具体可以参考:CreateMutex、WaitForSingleObject
      

  4.   

    http://blog.csdn.net/agoago_2009/article/details/6712115
      

  5.   

    BOOL SetThreadPriority(
      HANDLE hThread, // handle to the thread
      int nPriority   // thread priority level
    );
    //优先级好像不能超过15
      

  6.   


    表达的是有问题,9楼说的很正确void Thread1
    {
      while(true)
     {
      accept();//这里有个阻塞函数如accept,recv之类的
      EnterCriticalSection(&cs);
      //全局资源操作
      LeaveCriticalSection(&cs);
     }
    }Thread1在阻塞函数执行完成之后,下面也不会执行到,全被Thread2抢去了
      

  7.   

    应该是你的accept阻塞了。
      

  8.   

    请注意我11楼的话,Thread1在阻塞函数执行完成之后,阻塞函数下面也执行不到,都在执行Thread2
      

  9.   

    请注意我11楼的话,Thread1在阻塞函数执行完成之后,阻塞函数下面也执行不到,都在执行Thread2
      

  10.   

    你怎知道你的Accept执行完毕了??你确定你的Accept返回了??
      

  11.   

    用InitializeCriticalSectionAndSpinCount代替InitializeCriticalSection,用法MSDN
      

  12.   

    http://topic.csdn.net/u/20110704/17/a5aa88fd-cb2b-42ed-9560-676c17e5ede5.html
    似乎跟我的问题没什么联系,而且单核cpu是无效的
      

  13.   


    能把两个线程的 进入临界区的
    EnterCriticalSection(&cs);
    附近的代码提出来没,照目前的情况来看,你的程序应该不会出现独占现象。需要详细的代码。
      

  14.   

    我执行过几十次,Thread1临界区内的操作,会执行1-2次吧,按我的程序设计要求,Thread1里的操作需要执行5次,所以想怎么控制进入临界区的顺序