如何在多线程中,共用一个Map(注:不是本地线程存储中的每个线程一个值,而是共用一个) 如何在多线程中,共用一个Map(注:不是本地线程存储中的每个线程一个值,而是共用一个)。给出实现代码,100分就是他(她)的. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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);};#endifSingleMutex.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(); 如果是同一个进程,也可以用CRITICAL_SECTION,并且效率更高 多线程中对map的操作需要同步用临界区实现互斥访问效率是最高的 程序句法错误,帮忙改一下,谢谢了! 如何禁用网卡????????????急急急!!!!!!!!!!!!!高手帮忙呀!!!!!!!!!!!!! VC++初学者,望大家给我提供几本好点的书 DLL问题,请帮帮忙 谁有CRC校验的详细资料或代码??100分求 COblist使用中的问 有关指针链表的问题。100分请教 MFC读取TXT问题 flash中Fscommand问题 是没高手还是讨厌我(我的问题没人看) 类中的成员函数作为线程主体时,必须是static么? 请教:Listctrl中,如何将某一个subitem的某一部分改变字体颜色或背景色!
#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();
用临界区实现互斥访问
效率是最高的