2014-02-14 1 views
0

루프에 N 개의 쓰레드를 생성하는 코드를 개발하려고합니다. 각 스레드는 40 개의 난수를 생성하고 가장 높은 것을 선택합니다. 그 후, 나는 가장 높은 숫자를 선택해야합니다.멀티 쓰레드 벡터에서 값을 반환합니다.

class rdm_thr 
{ 
public: 
rdm_thr() 
{ 
} 
void rdmgen() 
{ 
    default_random_engine generator; 
    double rdm; 
    b=0; 
    normal_distribution<double> normal(0, 1); 
    for(int i=0; i<40; i++) 
    { 
     rdm = normal(generator); 
     if(rdm>b) 
      b = rdm; 
    } 
} 
}; 


void main() 
{ 
vector<boost::thread *> z; 
vector<rdm_thr> o; 
boost::function<void()> th_func; 

for (int i = 0; i < 2; i++) 
    o.push_back(rdm_thr()); 

for (int i = 0; i < 2; i++) 
{ 
    th_func = boost::bind(&rdm_thr::rdmgen, &o[i]); 
    boost::thread thr(th_func); 
    z.push_back(&thr); 
} 

for (int i = 0; i < 2; i++) 
{ 
    z[i]->join(); 
} 
} 

그것을 할 수있는 또 다른 방법이있다 : I의 (b)를 각 스레드의 가장 높은 값을 반환 할 때,이는 내가 사용하고있는 코드가 비어있다?

class rdm_thr 
{ 
    public: 
     rdm_thr() {} 

     void rdmgen() 
     { 
      ... 
     } 

     void join() { t.join(); } 

     void start() 
     { 
      t = boost::thread(boost::bind(&rdm_thr::rdmgen, this)); 
     } 


    private: 
     boost::thread t; 
     // could also be pointer type and 'new/delete' would have to be used in that event 
}; 

#define TSZ 2 

void main() 
{ 
    std::vector<rdm_thr*> o; 
    int i = 0; 
    for (; i < TSZ; i++) { 
     o.push_back(new rdm_thr()); 
     o.back()->start(); 
    } 
    for (i = 0; i < TSZ; i++) { 
     o[i]->join(); 
     delete o[i]; //clean up 
    } 
} 

을 그리고 당신은 클래스 로직을 변경하지 않은 경우, 당신은 당신의 주요 기능에 다음 작업을 수행 할 수 있습니다 : :

답변

0

당신은 같은 클래스의 논리를 바꿀 수

#define TSZ 2 
void main() 
{ 
    std::vector<boost::thread *> z; 
    std::vector<rdm_thr *> o; 
    int i = 0; 
    for (; i < TSZ; i++) { 
     o.push_back(new rdm_thr()); 
     z.push_back(new boost::thread(boost::bind(&rdm_thr::rdmgen, o.back()))); 
    } 
    for (i = 0; i < TSZ; i++) { 
     z[i]->join(); 
     delete z[i]; 
     delete o[i]; 
    } 
} 

저는 지금 컴파일러에 접근 할 수 없기 때문에 100 %를 검증 할 수는 없지만 이론에 대해 더 많이 묻는다면 위의 코드는 비슷한 결과를 얻는 다른 방법을 설명하는 데 도움이됩니다.

내가 도와 줄 수 있기를 바랍니다.

+0

코드에 대한 아이디어는 아니지만 해결해주었습니다. 정말 고마워요! –

+0

다행스럽게도 나는 오해 할지라도 도움이 될 수 있었다. 필요한 경우 더 명확하게 편집 할 수도있다. – txtechhelp

관련 문제