пробую многопоточность средствами thread:
#include <iostream>
#include <thread>
using namespace std;
void factorial(int n, unsigned long long int *result) {
if (n==1) {
*result=1;
return;
}
*result=1;
for (; n!=0; n--) *result=*result*n;
}
int main() {
unsigned long long int a,b;
unsigned long long int *c=&a;
unsigned long long int *d=&b;
thread t1(factorial,15,c);
thread t2(factorial,17,d);
t1.join();
t2.join();
cout << a << endl << b << endl;
return 0;
}
вывод:
terminate called after throwing an instance of 'std::system_error'
what(): Enable multithreading to use std::thread: Operation not permitted
Aborted (core dumped)
опции компилятора:
g++ -pthread -std=c++11 -O0 -g -Wall -o thread thread.cpp
пробовал подставлять -lpthread, та же ошибка
проверяю ldd:
shkiper@server:~/C++$ ldd ./a.out
linux-vdso.so.1 => (0x00007fffd37b9000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f4ec8405000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f4ec81ef000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f4ec7e27000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f4ec7b23000)
/lib64/ld-linux-x86-64.so.2 (0x00007f4ec8729000)
shkiper@server:~/C++$ ls /lib/x86_64-linux-gnu/ | grep thread
libpthread-2.17.so
libpthread.so.0
libthread_db-1.0.so
libthread_db.so.1
shkiper@server:~/C++$
конечно, можно попробовать линковать вручную, но это ужасные костыли
в чем может быть проблема?