我在多线程环境中使用 CList,但 GetHead 方法一直存在问题。我有一个线程将数据添加到列表中,另一个线程从列表中读取和删除数据。这是阅读部分:
value_type get_next()
{
T t;
if(!queue.IsEmpty()) {
t = queue.GetHead();
}
return t; //If the queue is empty we return an empty element
}
这是插入部分:
inline void insert(T &_in)
{
queue.AddTail(_in);
}
这是删除部分
inline void pop_next()
{
if(!queue.IsEmpty()) {
queue.RemoveHead();
}
}
为什么运行时会出现运行时错误。它总是失败
t = queue.GetHead();
有了这个断言:
template<class TYPE, class ARG_TYPE>
AFX_INLINE TYPE& CList<TYPE, ARG_TYPE>::GetHead()
{ ENSURE(m_pNodeHead != NULL);
return m_pNodeHead->data; }
而 m_pNodeHead 值为:
- pNext 0x00000000 {pNext=??? 上一页=???数据={...} } CList > >,ATL::CStringT > > &>::CNode *
- pPrev 0x00000000 {pNext=??? 上一页=???数据={...} } CList > >,ATL::CStringT > > &>::CNode *
- 数据 "" TESTSETSE ATL::CStringT > >