我已經創建了一個未來對象,因爲這樣的:Boost線程失敗BOOST_ASSERT(px!= 0);
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對象的condition.wait(mut)失敗了BOOST_ASSERT(px!= 0);在intrusive_ptr.hpp中。
我不明白爲什麼會發生這種情況。
我在mingw g ++編譯器的窗口中使用boost線程。
Boost已經提供了未來的對象。 http://www.boost.org/doc/libs/1_49_0/doc/html/thread/synchronization.html#thread.synchronization.futures – kennytm 2012-03-01 20:04:35
我意識到這一點。我不想被綁定到特定的實現。如果更進一步,我希望使用pthreads,我只需要更改我的Future對象。無論如何,我的實施有問題嗎? – rjmarques 2012-03-01 20:07:55
你能用最簡單的例子來說明你如何使用未來嗎? – kennytm 2012-03-01 20:12:01