如何在多线程中,共用一个Map(注:不是本地线程存储中的每个线程一个值,而是共用一个)。给出实现代码,100分就是他(她)的.

解决方案 »

  1.   

    SingleMutex.h
    #ifndef SingleMutexH
    #define SingleMutexHclass CSingleMutex
    {
    private:
       int FInterval;
       void *FHandle;
    public:
       CSingleMutex(void);
       CSingleMutex(const char *AName);
       ~CSingleMutex(void){Close();}
       void Close(void);
       bool Create(const char *AName);
       inline bool Handle(void){return FHandle;}
       bool Lock(void);
       bool Open(const char *AName);
       inline void SetInterval(int AInt){FInterval = AInt;}
       void Unlock(void);
    };#endif
    SingleMutex.cpp
    #include <windows.h>
    #include "SingleMutex.h"CSingleMutex::CSingleMutex(void): FInterval(INFINITE), FHandle(NULL)
    {
    }CSingleMutex::CSingleMutex(const char *AName): FInterval(INFINITE)
    {
       FHandle = CreateMutex(NULL, false, AName);
    }void CSingleMutex::Close(void)
    {
       if(FHandle)
       {
          CloseHandle(FHandle);
          FHandle = NULL;
       }
    }bool CSingleMutex::Create(const char *AName)
    {
       FHandle = CreateMutex(NULL, false, AName);
       return FHandle;
    }bool CSingleMutex::Lock(void)
    {
       return WaitForSingleObject(FHandle, INFINITE) != WAIT_FAILED;
    }bool CSingleMutex::Open(const char *AName)
    {
       FHandle = OpenMutex(NULL, false, AName);
       return FHandle;
    }void CSingleMutex::Unlock(void)
    {
       ReleaseMutex(FHandle);
    }CSingleMutex FMutex("map_mutex");    FMutex.Lock();
        // 这是对map的操作
        FMutex.Unlock();
      

  2.   

    如果是同一个进程,也可以用CRITICAL_SECTION,并且效率更高
      

  3.   

    多线程中对map的操作需要同步
    用临界区实现互斥访问
    效率是最高的