27.10.2012, 15:40. Просмотров 1335. Ответов 8
Здравствуйте, форумчане!
Столкнулся с такой проблемой. Есть массив. Надо создать поток для заполнения массива случайными числами в случайном месте. Делаю это так:
C++ |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
| #include "stdafx.h"
#include <iostream>
#include <thread>
#include <mutex>
#include <vector>
using namespace std;
struct cMass
{
mutex m;
vector<int> mass;
cMass():{
for(int i=0; i<10; i++)
mass.push_back(rand());
}
void push(int a){
lock_guard<mutex> guard(m);
mass.insert(mass.begin()+rand()%(mass.size()-1), rand());
}
void out(){
lock_guard<mutex> guard(m);
for(int i=0; i<mass.size(); i++)
cout<<mass[i]<<' ';
cout<<endl<<endl;
}
};
int main()
{
cMass cm;
std::vector<std::thread> threads;
for(int i = 0; i < 20; ++i) {
threads.push_back(std::thread([&cm](){counter.push();}));
threads.push_back(std::thread([&cm](){counter.out();}));
}
for(auto& thread : threads){
thread.join();
}
int a; cin>>a;
return 0;
} |
|
Но при заполнении массив заполняется каждый раз одним и тем же числом, хотя вставляет в разные места. Есть куча тем, где описывается, почему в разных потоках rand() вставляет одно и то же число, но по этой теме ничего не нашел. Или я вообще потоками не правильно пользуюсь? Помогите пожалуйста!
Добавлено через 51 минуту
srand() не помогает