Массив и многопоточность

152
08 февраля 2018, 17:11

программа запускает 2 потока

1 поток должен найти в заданном массиве количество парных и количество нечетных чисел.

2 поток должен посчитать количество чисел которые делятся нацело на 5 или 7  

один из этих потоков в начале программы должен заполнить массив числами от 1 до 1000, это должен сделать один из трех потоков, то кто первым сможет захватить ресурс - массив(используя std::once_flag, std::call_once)

Функции я написала. Но я не знаю как сделать чтобы один поток заполнил рандомно. Нужна ваша помощь.

void evenOROdd(int* array)
{
int evenCount = 0;
int oddCount = 0;
size_t arraySize = sizeof(array) / sizeof(int);
for (int index = 0; index < arraySize; ++index)
{
    if ((array[index] % 2) != 0)
        ++evenCount;
    else if ((array[index] % 2) == 0)
        ++oddCount;
}
std::cout << "Even- " << evenCount << "\n";
std::cout << "Odd- " << oddCount << "\n";
}


void entireFiveOrSeven(int* array)
{
int count = 0;
size_t arraySize = sizeof(array) / sizeof(int);
for (int index = 0; index < arraySize; ++index)
{
    if ((((array[index] % 5) == 0)) || ((array[index] % 7) == 0))
        ++count;
}
std::cout << "EntireFiveOrSeven- " << count << "\n";
}

void randomValues() 
{
std::srand(time(0));
size_t array_size = 1000;
int* array = new int[array_size];
for (int index = 0; index < array_size; ++index)
    array[index] = (rand() % 999 + 1);
}

  int main()
  {
    static int randomValues = randomValues();
    std::thread t1(evenOROdd);
    std::thread t2(entireFiveOrSeven);
    t1.join();
    t2.join();
    return 0;
  }

UPD:Переделала как в примере. Но Я так и не пойму как можно как я делать в меине делать.

 std::once_flag flag;
 void randomValues() 
 {
    std::srand(time(0));
    size_t array_size = 1000;
    int* array = new int[array_size];
    std::call_once(flag, array);
    for (int index = 0; index < array_size; ++index)
       array[index] = (rand() % 999 + 1);
  }

 int main()
 {
std::thread t1(randomValues);
std::thread t2(randomValues);
std::thread t1(evenOROdd);
std::thread t2(entireFiveOrSeven);
t1.join();
t2.join();
return 0;
 }
READ ALSO
ifndef, define, endif

ifndef, define, endif

Я не понимаю, то ли я криворук, то ли лыжи не скачут

205
Метод Delete. Обертка над массивом. Неверный алгоритм

Метод Delete. Обертка над массивом. Неверный алгоритм

У меня есть некий класс, который является оберткой над массивомЭтот класс называется хранилищем моих элементов

228
Взаимодействие php и java (не js)

Взаимодействие php и java (не js)

Есть программа, большую часть своей жизни она сидит в трее и должна иногда мигать иконкой, при двойном клике открывать вебкитМигает она или...

189
Как записать данные из переменной в файл?

Как записать данные из переменной в файл?

Как записать данные из double probinres в FILENAME?

210