我在编一个多线程的程序时,有一个共用的数据列表userlist。在线程中修改它的地方只有2处,但读取它的地方却有8处(而且修改很少发生)。
    问题是我设定怎样的同步类操作,性能才达到最好。
    我希望是只有在修改userlist时才将它锁定,不修改时其它所有线程都可以读取数据用来操作。
    哪位能给个源码,那是最好。先谢谢了。 [email protected]

解决方案 »

  1.   

    使用信号量呀,参见。CMutex等。
      

  2.   

    使用CMutex(互斥量)或critical_section(临界区)
      

  3.   

    对于一个多线程的程序,如果在一个进程下面,使用用户方式的critical_section性能会高一点,它免去了系统为管理内核对象的开销,
    下面是伪码:CRITICAL_SECTION cs;InitializeCriticalSection(&cs);DWORD WriteThread(LPVOID lpvParam)
    {
       EnterCriticalSection(&cs);
          your code...........
       LeaveCriticalSection(&cs);

    return 0;
    }
    DWORD ReadThread(LPVOID lpvParam)
    {
             your code...........
      
    return 0;
    }有个问题,在读的时候,你的写进程也对数据操作该怎么办。
      

  4.   

    To All :我目前就是使用的CMutex,然后用CSingleLock来处理。但我感觉不满意。
    我的意思是,只要有一个修改数据的线程,则其它所有的线程都不可以读取或修改数据;如果没有任何一个修改数据的线程存在时,则其它所有的读取线程都可以读取数据。
    非常感谢你们的支持!