我遇到了一个奇怪的情况。 我有一个调用C ++代码的Android应用程序。 在C ++代码中,我有两个线程,一个是将数据放入阻塞队列,另一个线程将数据从阻塞队列中取出。 数据结构如下:
typedef struct {
int len;
char* data;
} myStruct;
每次我将myStruct
的指针放入队列并将此指针从队列中取出。
但有时我会从数据中得到一个非常大的len。就像我在下面显示的日志文件一样:
Put Log Length: 128
Take Log Length: 128
Put Log Length: 171
Take Log Length: 171
Put Log Length: 73
Take Log Length: 73
Put Length: 99
Put Length: 72
Put Length: 124
Take Log Length: 72
......
Take Log Length: 2047249896
我的阻止队列代码如下:
#include "BlockingQueue.h"
template<typename T>
void BlockingQueue<T>::put(const T& task)
{
std::unique_lock<std::mutex> lock(mtx);
q.push_back( task );
isEmpty.notify_all();
}
template<typename T>
T BlockingQueue<T>::take()
{
std::unique_lock<std::mutex> lock(mtx);
isEmpty.wait(lock, [this]{return !q.empty(); });
T front( q.front() );
q.pop_front();
return front;
}
template<typename T>
bool BlockingQueue<T>::empty()
{
std::unique_lock<std::mutex> lock(mtx);
return q.empty();
}