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
}
}
을 그리고 당신은 클래스 로직을 변경하지 않은 경우, 당신은 당신의 주요 기능에 다음 작업을 수행 할 수 있습니다 : :
코드에 대한 아이디어는 아니지만 해결해주었습니다. 정말 고마워요! –
다행스럽게도 나는 오해 할지라도 도움이 될 수 있었다. 필요한 경우 더 명확하게 편집 할 수도있다. – txtechhelp