gpt4 book ai didi

c++ - std::map 的线程安全使用

转载 作者:太空狗 更新时间:2023-10-29 23:15:40 26 4
gpt4 key购买 nike

我有一个 std::map<int, object*>我需要从不同的线程访问(读取和写入)。当然,我可以只使用一个临界区来读写,但这会对性能产生巨大影响,因为我有很多find()。调用(每秒数千次)和更少的写入(通常,在创建和销毁线程时,一次插入和一次删除)。

因此,我需要使用 CriticalSection用于写入并且仅在读取之前检查另一个线程是否正在执行写入操作。但是怎么办?我找到了 C++11 和 boost 的解决方案,但我使用的是 Visual Studio 2008(因为兼容性问题)。

有人可以给我一个例子或解释如何做吗?谢谢!

最佳答案

您可以创建一个类来包装您的 std::map 并使用互斥锁锁定写/读函数。使用互斥锁结构作为此类的成员,并根据功能适本地锁定/解锁。

Windows API 有一些 mutex functions向系统注册互斥锁句柄。该句柄充当 Windows 识别互斥锁并检查它是否正在等待的一种方式。

这是一个简单的互斥锁类,可让您开始使用一些 Windows API 调用。

class MyMutex {

private:
HANDLE m_hMutex;

public:
MyMutex()
{
m_hMutex = CreateMutex(NULL, FALSE, NULL);
}

~MyMutex()
{
CloseHandle(m_hMutex);
}

void Lock()
{
BOOL test = WaitForSingleObject( m_hMutex, INFINITE );
}

void UnLock()
{
ReleaseMutex( m_hMutex );
}
};

关于c++ - std::map 的线程安全使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28144176/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com