I'm trying to spawn some threads on C++ using std::thread
but I can't get it to work. If it makes any difference I'm using VS 2015. It fails on thread creation ( t[thread_id] = std::thread(test);
). This is the relevant part of my code:
void test() {}
void threaded_DFT(std::complex<double>* x, std::complex<double>* X, size_t N) {
std::complex<double>* tmp=(std::complex<double>*)malloc(N * sizeof *tmp);
std::thread* t=NULL;
size_t num_threads;
size_t stages = log2(N);
size_t FFT_8_stages = stages / 3;
size_t remainder_stages = stages % 3;
size_t Ns = 1;
for (size_t i=0, Ns = 1; i < FFT_8_stages; i++,Ns=pow(2,3*i))
{
num_threads = N / 8;
t = (std::thread*)malloc(num_threads * sizeof *t);
if (!t)
exit(EXIT_FAILURE);
for (size_t thread_id = 0; thread_id < num_threads; thread_id++) {
t[thread_id] = std::thread(test);
//t[thread_id] = std::thread(FFT_8, x, X, N, Ns, thread_id);
}
for (size_t thread_id = 0; thread_id < num_threads; thread_id++) {
t[i].join();
}
x = X;
X = tmp;
tmp = x;
}
free(t);
...}
And this is the callstack:
ucrtbased.dll!00007ffd296a21c5() Unknown
ucrtbased.dll!00007ffd296a2363() Unknown
ucrtbased.dll!00007ffd296c388d() Unknown
ucrtbased.dll!00007ffd296c28f6() Unknown
SignalPlot.exe!std::thread::_Move_thread(std::thread & _Other) Line 111 C++
SignalPlot.exe!std::thread::operator=(std::thread && _Other) Line 68 C++
SignalPlot.exe!threaded_DFT(std::complex<double> * x, std::complex<double> * X, unsigned __int64 N) Line 224 C++
SignalPlot.exe!main(int argc, char * * argv) Line 322 C++
SignalPlot.exe!WinMain(HINSTANCE__ * __formal, HINSTANCE__ * __formal, char * __formal, int __formal) Line 113 C++
This should be simple so I'm guessing there is something obvious I'm failing to notice.