如题.
UINT WriteThread1(LPVOID param) 
{Section.Lock(); 
for(int x=0;x<10;x++) 
array[x]=x; 
Section.Unlock(); 

UINT WriteThread2(LPVOID param) 
{
while(bRun)
{
Section.Lock(); 
for(int x=0;x<10;x++) 
array[x]=x; 
Section.Unlock();


解决方案 »

  1.   

    这与操作系统的任务调度机制有关
    对于象 Lock/Unlock 这样的函数实际上会在操作系统中引起线程的状态变迁,使线程在运行、就绪和等待状态间跃迁,而线程因事件阻塞,一个线程Unlock后,另一线程的Lock函数使得该线程从阻塞状态变迁为执行或就绪态,对操作系统而言,对这样的解除阻塞状态时的状态变迁会临时提高线程的优先级,因此频繁地使用这样的代码会使系统资源大大消耗,内核时间和用户态时间的比值将缩小
    虽然用 Lock 和 Unlock 可以阻塞另一线程,在需要同步处理时用 while(1) 这样的做法实际上并没有减小CPU的开销