У меня проблема с кодом. Эта функция помещает товар в очередь.
void producent(bool &cont,std::queue<std::string> &queue,std::mutex &mtx, int &milliseconds)
{
while (cont)
{
mtx.lock();
if (queue.size() >= MAX_QUEUE_SIZE)
{
mtx.unlock();
std::cerr << "buffor full " << std::endl;
}
else
{
std::string product = generate();
std::cerr << "producent: " << product << " " << std::endl;
queue.push(product);
mtx.unlock();
}
std::this_thread::sleep_for(std::chrono::milliseconds(milliseconds));
}
}
эта функция генерирует строку из 10 знаков, которые помещаются функцией void producent ().
std::string generate() {
std::string temp;
temp.resize(10);
for (int i = 0; i < 10; i++) {
temp[i] = rand() % ('z' - 'a' + 1) + 'a';
}
return temp;
}
Мой вопрос: почему , когда я создаю 2 потока, например:
std::thread prod(producent, std::ref(wykonuj),std::ref(kolejka), std::ref(kolejka_mtx),std::ref(t));
std::thread prod1(producent, std::ref(wykonuj), std::ref(kolejka), std::ref(kolejka_mtx), std::ref(t));
, оба они дают мне одинаковый результат, например результат:
producent: qweasdzxca
producent: qweasdzxca
Я хотел, чтобы эти результаты были разными, вот и все почему я использовал мьютекс, но он не работал. Может кто-нибудь дать мне совет?