我该如何处理队列前端和弹出功能

时间:2015-01-20 10:00:24

标签: c++ multithreading memory stl queue

我在c ++引用和队列头文件中读取queue.front()函数返回引用。 queue.pop()似乎删除了队列中的那个元素。

在我的情况下队列存储字符串(消息)有一个类在队列中存储一些字符串,一些线程调用一个看起来像这样的函数

pthread_mutex_lock(&this->mutex);

while(this->TEMP.size() == 0){
    usleep(10);
}

string line;



line = this->TEMP.front();

this->TEMP.pop();

pthread_mutex_unlock(&this->mutex);
return line;;
}

所以,如果它是一个引用,调用该函数的线程将会死亡或发生可怕的事情,因为之前内存被pop释放。

到目前为止我是对的吗?

所以我该怎么做?

1 个答案:

答案 0 :(得分:3)

您正在呼叫line.operator=(std::string& source)。引用source是从TEMP.front()返回的引用初始化的。一旦该运算符返回,就完成了赋值。您现在有两个字符串副本。在.pop之后,原始文件已经消失,但line仍然保留其原始值。