资讯   |   开发   |   选机中心   |   产品大全 | IBM | 惠普 | 联想 | 戴尔 | 苹果 | 神舟
更多: | 华硕 | 明基 | 方正 | 紫光 | TCL | 夏新 | 联宝 | 宏碁 | 七喜 | 长城 | 清华同方 | 海尔 | 三星 | 东芝 | 索尼 | 富士通 | LG | 技术 | ddnoon
当前位置:笔记本 > 软件开发 >
Advertisement
文章正文

很简单的问题,线程同步,主线程里用操作吗?

类型:转载   责任编辑:asp.net   日期:2007/05/23


热门软件下载:


   

主线程里要对一个缓从区进行平繁(1秒更新一次)赋值,工作者线程读取缓从区值,并发到网上去。  
   
  我现在在工作者线程里用到CRITICAL_SECTION来同步,只是不知道在主线程里还用同步吗?  
   
   
  例如:  
   
  //   临界区结构对象  
  CRITICAL_SECTION   g_cs;  
  //   共享资源    
  char   g_cArray[10];  
  UINT   ThreadProc(LPVOID   pParam)  
  {  
   //   进入临界区  
   EnterCriticalSection(&g_cs);  
   //   对共享资源进行写入操作  
   for   (int   i   =   0;   i   <   10;   i++)  
   {  
          if(flag)  
          {  
                  send(g_cArray[i]);  
          Sleep(1);  
          }  
   }  
   //   离开临界区  
   LeaveCriticalSection(&g_cs);  
   return   0;  
  }  
  ……  
  void   CSample08View::OnCriticalSection()    
  {  
   //   初始化临界区  
   InitializeCriticalSection(&g_cs);  
   //   启动线程  
   AfxBeginThread(ThreadProc,   NULL);  
       
      SetTimer(1,1000,NULL);  
  }  
   
  void   CSample08View::OnTime(..)  
  {  
   EnterCriticalSection(&g_cs);//这一对同步要加吗?     为什么?  
      for   (int   i   =   0;   i   <   10;   i++)  
      {  
         
   
            g_cArray[i]   =   a+rand();  
      }  
   LeaveCriticalSection(&g_cs);  
   
         
  }  
 

网友回答:

发表者:betsyalan

当然要了,如果不加同步,你线程发送g_cArray的时候,你的主线程很有可能正在修改呢。

发表者:xpdavis

当然都需要同步了

发表者:DentistryDoctor

当然需要同步.  
  建议用CCriticalSection+CSingleLock

发表者:DentistryDoctor

同步同步,当然是多个线程之间的同步了哟。

发表者:Zengbp

在每一个进程里要同步的变量前都要加上   CRITICAL_SECTION   ,不然的话根本达不到同步的目的!  
        进程在执行到进入CRITICAL_SECTION   时会做一个检查,看有没有别的进程在占用这个临界区变量,如果被占用就等待直到被释放,然后继续执行!

发表者:oyljerry

主线程一般不要阻塞,否则会阻塞整个进程的

发表者:zxindut

同步是需要的  
  关于那个问题期待高人的回答  
 

发表者:Caps77

Zengbp():  
    在每一个进程里要同步的变量前都要加上   CRITICAL_SECTION   ,不然的话根本达不到同步的目的!  
        进程在执行到进入CRITICAL_SECTION   时会做一个检查,看有没有别的进程在占用这个临界区变量,如果被占用就等待直到被释放,然后继续执行!  
   
  =========================================================================  
  这里提到“等待”,既然主线程会等待,说明主线程会死咯????  
   
  学习!

发表者:yanedanny

所有需要操作共享数据的线程都需要申请进入临界区,closehandle不需要。

发表者:YRYFSTUGAO

在下觉得如果应用了多线程就不必用定时器了!在多线程同步问题上我觉得只要多个线程访问了共享数据并且有冲突的可能就需要同步。大体我觉得应该设置一个同步信号,在工作者线程检测信号,如果有信号可以继续处理,处理完成后发送消息给主线程,主线程处理共享数据时将信号设成无信号完成处理发送信号。工作者线程可以用等待事件函数等待,这样就达到了同步的目的了!等待函数好像是:WaitForSingleObject().


 

 
热门推荐笔记本: NEC笔记本
相关文章:
webmaster:popbb@126.com   最佳浏览:1024X768 MSIE
©2007 popbb.net All Rights Reserved