You are on page 1of 1

// Please note that MinGW32 compilers currently do not support <thread>.

Use
MinGW64 builds like TDM-GCC instead.

#include <thread>
using std::thread;
#include <vector>
using std::vector;
#include <stdio.h>

struct ThreadItem {
char* result; // could've used stringstream too, but don't like their syntax
thread worker;
};

void* ThreadFunction(char** result) {


*result = new char[256];
snprintf(*result,256,"Hello World from thread ID %d",
std::this_thread::get_id());
}

int main() {
// Get the amount of "processing units"
int n = std::thread::hardware_concurrency();

// Create array of threads


vector<ThreadItem> threadlist;
threadlist.resize(n);

// Spawn a thread for each core


for(int i = 0;i < n;i++) {
threadlist[i].worker = thread(ThreadFunction,&threadlist[i].result); //
pass rand() as data argument
}

// Wait for them all to finish


for(int i = 0;i < n;i++) {
threadlist[i].worker.join();
}

// Present their calculation results


printf("Results:\n");
for(int i = 0;i < n;i++) {
printf("%s\n",threadlist[i].result);
}
}

You might also like