Мне нужно написать программу, которая будет печатать символы на консоли. Потоки не должны быть синхронизированы, что означает, что данные будут смешаны, а выходные данные должны быть грязными. Тем не менее, мой вывод работает нормально, и кажется, что я делаю что-то не так.
typedef struct {
std::string info;
unsigned int m_number;
unsigned m_cycles;
unsigned m_currentThread;
}data;
unsigned int __stdcall Func(void* d) {
data* real = (data*)d;
std::cout << "Current thread ID: " << GetCurrentThreadId() << std::endl;
int i = 0;
for (int j = (real->m_currentThread - 1) * real->m_cycles / real->m_number;j < real->m_currentThread * real->m_cycles / real->m_number;j++) {
std::cout << real->info << std::endl;
}
return 0;
}
int main(int argc, char* argv[]) {
int threadsNumber;
std::string str;
std::getline(std::cin, str);
std::cout << "Enter the number of threads:\n";
std::cin >> threadsNumber;
int cycles;
std::cout << "Enter the number of cycles:\n";
std::cin >> cycles;
std::vector<HANDLE> threads;
HANDLE tmp;
data* args = new data;
args->info = str;
args->m_number = threadsNumber;
args->m_cycles = cycles;
for (int i = 1;i <= threadsNumber;++i) {
args->m_currentThread = i;
tmp = (HANDLE)_beginthreadex(0, 0, &Func, args, 0, 0);
Sleep(1000L);
threads.push_back(tmp);
}
WaitForMultipleObjects(threads.size(), &threads.front(), TRUE, INFINITE);
getchar();
return 0;
}
Вывод должен быть посимвольным, а строки должны быть запутанными, поскольку пока нет синхронизации между потоками.