Я создал объект будущего, как таковой:
Future.h
#ifndef FUTURE_H_
#define FUTURE_H_
#include "../interfaces/IFuture.h"
#include <stdio.h>
#include <boost/thread.hpp>
using namespace boost;
class Future: public IFuture {
private:
void** data;
bool isDataReady;
mutex mut;
condition_variable cond;
public:
Future();
~Future();
bool isReady();
void setData(void* data[]);
void** getData();
};
#endif /* FUTURE_H_ */
Future.cpp
#include "../headers/Future.h"
Future::Future(){
this->data = NULL;
this->isDataReady = false;
}
Future::~Future(){
delete [] data;
}
bool Future::isReady(){
return isDataReady;
}
void Future::setData(void* data[]){
if(isDataReady)
return;
{
lock_guard<mutex> lock(mut);
this->data = data;
isDataReady = true;
}
cond.notify_one();
}
void** Future::getData(){
unique_lock<mutex> lock(mut);
while(!isDataReady){
cond.wait(lock);
}
return data;
}
Основное приложение создает несколько объектов Futureпо мере необходимости.Первый объект работает нормально, но вокруг сотого объекта Future условие.wait (mut) завершается с ошибкой BOOST_ASSERT (px! = 0);в intrusive_ptr.hpp.
Я не понимаю, почему это происходит.
Я использую Boost Thread в Windows на компиляторе Mingw G ++.