我有一个 SyncSet 模板类,它锁定了集合操作。当我在做压力测试时,我崩溃了。当我检查崩溃输出文件时,似乎原因是关于 set 容器的查找功能。您可以在下面看到我的模板类,您可以在 pastebin 链接中找到相关的崩溃输出:http: //pastebin.com/1JzAWxjf
我的模板类中是否有问题可能导致此类崩溃?其次,操作系统中止应用程序是否可能因为内存限制超过或类似的东西,那么有没有办法检查操作系统上的消息(Windows 7专业版)?
所有的建议和意见都欢迎和 appricated。
谢谢。
template <typename T>
class SyncSet
{
public:
SyncSet() {
InitializeCriticalSection(&m_lock);
}
~SyncSet() {
DeleteCriticalSection(&m_lock);
}
void Insert(T elem) {
EnterCriticalSection(&m_lock);
m_set.insert(elem);
LeaveCriticalSection(&m_lock);
}
bool Has(T elem) {
if (m_set.empty() || m_set.find(elem) == m_set.end())
return false;
return true;
}
bool Erase(T elem) {
if (!Has(elem))
return false;
EnterCriticalSection(&m_lock);
m_set.erase(elem);
LeaveCriticalSection(&m_lock);
return true;
}
size_t Size() {
return m_set.size();
}
void Clear() {
EnterCriticalSection(&m_lock);
m_set.clear();
LeaveCriticalSection(&m_lock);
}
private:
std::set<T> m_set;
CRITICAL_SECTION m_lock;
};