急求ACE高手指点
include "stdafx.h"#include <cstdlib>#include <vector>#include <algorithm>#include <iostream>#include <stdlib.h>#include "ace/Task.h"#include "ace/Semaphore.h"using namespace std;class DataCheckSetMoiData : public ACE_Task_Base{public: DataCheckSetMoiData( ACE_Semaphore& psema, ACE_Semaphore& csema, std::list<int>& moiList, ); virtual int svc(void);private: std::list<int>& moiList_; ACE_Semaphore& psema_; ACE_Semaphore& csema_;};int DataCheckSetMoiData::svc(){ for (int i =0 ; i< 8; i++) { psema_.acquire(); moiList_.push_back(i); csema_.release(); } return 0;}class DataCheckGetMoiData : public ACE_Task_Base{public: DataCheckGetMoiData( ACE_Semaphore& psema, ACE_Semaphore& csema, std::list<int>& moiList, ); virtual int svc(void);private: std::list<int>& moiList_; ACE_Semaphore& psema_; ACE_Semaphore& csema_;};int DataCheckGetMoiData::svc(){ csema_.acquire(); int j = moiList_.front(); moiList_.pop_front(); psema_.release(); cout<<j<<endl; return 0;}int _tmain(int argc, _TCHAR* argv[]){ ACE_Semaphore psema(4); ACE_Semaphore csema(0); std::list<int> moiList; DataCheckSetMoiData * data = new DataCheckSetMoiData(psema, csema, moiList); data->activate(); DataCheckGetMoiData* getdata = new DataCheckGetMoiData(psema, csema, moiList); getdata->activate(); data->wait(); getdata->wait(); system("pause"); return 0; } for (int i = 0; i < 8; i++) { csema_.acquire(); int j = moiList_.front(); moiList_.pop_front(); cout<<j<<endl; psema_.release(); }