Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: c++: thread, operation not permited  (Прочитано 4991 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Kernel ops

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1388
    • Просмотр профиля
c++: thread, operation not permited
« : 12 Сентября 2013, 21:02:43 »
пробую многопоточность средствами thread:
Код: (C) [Выделить]
#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++$
конечно, можно попробовать линковать вручную, но это ужасные костыли
в чем может быть проблема?
root@shkiper:~$mount -t btrfs /dev/head1 /mnt && ls /mnt | grep brain | xargs -i sh /mnt/{}

Оффлайн peregrine

  • FSM
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 7215
  • Gentoo x64 Ubuntu 16.04.1 x64
    • Просмотр профиля
Re: c++: thread, operation not permited
« Ответ #1 : 12 Сентября 2013, 21:25:07 »
Kernel ops, УМВР. Какая версия Ubuntu? Может тебе каких либ не хватает?
g++ -pthread -std=c++11 -O0 -g -Wall  -o thread thread.cpp
./thread
1307674368000
355687428096000
$ file thread
thread: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0x565895481058344c91db023c9a78091803e86f33, not stripped
$ ldd thread
linux-vdso.so.1 =>  (0x00007fff97ffe000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f0d528a9000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f0d52693000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f0d52475000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f0d520ad000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f0d51da8000)
/lib64/ld-linux-x86-64.so.2 (0x00007f0d52be2000)

Пользователь решил продолжить мысль 12 Сентября 2013, 21:28:50:
Kernel ops, ещё неплохо про битность и проц написать.
« Последнее редактирование: 12 Сентября 2013, 21:28:50 от peregrine »

Оффлайн Kernel ops

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1388
    • Просмотр профиля
Re: c++: thread, operation not permited
« Ответ #2 : 12 Сентября 2013, 21:31:28 »
Ubuntu 13.10
shkiper@server:~/C++$ g++ --version
g++ (Ubuntu/Linaro 4.8.1-10ubuntu1) 4.8.1
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

shkiper@server:~/C++$
процессор на amd64
AMD Phenom X4

Пользователь решил продолжить мысль 12 Сентября 2013, 21:33:30:
g++ из стандартного репозитория
при -m32 и -m64 разницы никакой
« Последнее редактирование: 12 Сентября 2013, 21:33:30 от Kernel ops »
root@shkiper:~$mount -t btrfs /dev/head1 /mnt && ls /mnt | grep brain | xargs -i sh /mnt/{}

Оффлайн peregrine

  • FSM
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 7215
  • Gentoo x64 Ubuntu 16.04.1 x64
    • Просмотр профиля
Re: c++: thread, operation not permited
« Ответ #3 : 12 Сентября 2013, 21:44:27 »
Kernel ops, а библиотеки что я привёл все на месте?

Оффлайн Kernel ops

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1388
    • Просмотр профиля
Re: c++: thread, operation not permited
« Ответ #4 : 12 Сентября 2013, 22:18:45 »
peregrine,
shkiper@server:~/C++$ ldd thread
linux-vdso.so.1 =>  (0x00007fff299fe000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f4a4e779000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f4a4e563000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f4a4e19b000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f4a4de97000)
/lib64/ld-linux-x86-64.so.2 (0x00007f4a4ea9d000)
shkiper@server:~/C++$ ls /lib/x86_64-linux-gnu/ | grep libpthread
libpthread-2.17.so
libpthread.so.0
shkiper@server:~/C++$
root@shkiper:~$mount -t btrfs /dev/head1 /mnt && ls /mnt | grep brain | xargs -i sh /mnt/{}

Оффлайн kupamaan

  • Любитель
  • *
  • Сообщений: 52
    • Просмотр профиля
Re: c++: thread, operation not permited
« Ответ #5 : 13 Сентября 2013, 11:36:02 »
Код: (bash) [Выделить]
-std=c++11
Код: (bash) [Выделить]
-std=c++0x

Оффлайн Kernel ops

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1388
    • Просмотр профиля
Re: c++: thread, operation not permited
« Ответ #6 : 13 Сентября 2013, 16:52:29 »
kupamaan,
shkiper@server:~/C++$ g++ -pthread -std=c++0x -O0 -g -Wall  -o thread thread.cpp
shkiper@server:~/C++$ ./thread
terminate called after throwing an instance of 'std::system_error'
  what():  Enable multithreading to use std::thread: Operation not permitted
Аварийный останов (сделан дамп памяти)
shkiper@server:~/C++$
root@shkiper:~$mount -t btrfs /dev/head1 /mnt && ls /mnt | grep brain | xargs -i sh /mnt/{}

Оффлайн peregrine

  • FSM
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 7215
  • Gentoo x64 Ubuntu 16.04.1 x64
    • Просмотр профиля
Re: c++: thread, operation not permited
« Ответ #7 : 13 Сентября 2013, 18:16:59 »
Kernel ops, попробуй такой ключ:-std=gnu++11 вместо     -std=c++11

Оффлайн kupamaan

  • Любитель
  • *
  • Сообщений: 52
    • Просмотр профиля
Re: c++: thread, operation not permited
« Ответ #8 : 13 Сентября 2013, 19:54:36 »
Код: (bash) [Выделить]
g++ -Wall thread.cpp -o thread -pthread -std=c++0x -O0 -g
(Нажмите, чтобы показать/скрыть)
thrad.cpp -o thread -pthread -std=c++0x

обции для линьковки переставьте.
« Последнее редактирование: 13 Сентября 2013, 20:17:14 от kupamaan »

Оффлайн Kernel ops

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1388
    • Просмотр профиля
Re: c++: thread, operation not permited
« Ответ #9 : 13 Сентября 2013, 21:43:56 »
kupamaan,
shkiper@server:~/C++$ g++ -Wall thread.cpp -o thread -pthread -std=c++0x -O0 -g
shkiper@server:~/C++$ ./thread
terminate called after throwing an instance of 'std::system_error'
  what():  Enable multithreading to use std::thread: Operation not permitted
Аварийный останов (сделан дамп памяти)
shkiper@server:~/C++$

Пользователь решил продолжить мысль 13 Сентября 2013, 21:44:37:
Kernel ops,
переставлял по разному - не линкует
root@shkiper:~$mount -t btrfs /dev/head1 /mnt && ls /mnt | grep brain | xargs -i sh /mnt/{}

Оффлайн peregrine

  • FSM
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 7215
  • Gentoo x64 Ubuntu 16.04.1 x64
    • Просмотр профиля
Re: c++: thread, operation not permited
« Ответ #10 : 13 Сентября 2013, 21:47:46 »
Kernel ops, а так:
g++ -Wall thread.cpp -o thread -pthread -std=gnu++11 -O0 -g

Оффлайн kupamaan

  • Любитель
  • *
  • Сообщений: 52
    • Просмотр профиля
Re: c++: thread, operation not permited
« Ответ #11 : 13 Сентября 2013, 22:04:30 »
у меня компилятор
Цитировать
g++ (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
Copyright (C) 2011 Free Software Foundation, Inc.
может из за этого. Может для нового другие опции нужны?  :idiot2: :o ;D
« Последнее редактирование: 13 Сентября 2013, 22:16:28 от kupamaan »

Оффлайн peregrine

  • FSM
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 7215
  • Gentoo x64 Ubuntu 16.04.1 x64
    • Просмотр профиля
Re: c++: thread, operation not permited
« Ответ #12 : 13 Сентября 2013, 22:25:46 »
kupamaan,
$ g++ -v
Используются внутренние спецификации.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.7/lto-wrapper
Целевая архитектура: x86_64-linux-gnu
Параметры конфигурации: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.7.3-1ubuntu1' --with-bugurl=file:///usr/share/doc/gcc-4.7/README.Bugs --enable-languages=c,c++,go,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.7 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.7 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --with-system-zlib --enable-objc-gc --with-cloog --enable-cloog-backend=ppl --disable-cloog-version-check --disable-ppl-version-check --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Модель многопоточности: posix
gcc версия 4.7.3 (Ubuntu/Linaro 4.7.3-1ubuntu1)
И УМВР в любом варианте компилирования (всеми приведёнными в теме командами).

Оффлайн kupamaan

  • Любитель
  • *
  • Сообщений: 52
    • Просмотр профиля
Re: c++: thread, operation not permited
« Ответ #13 : 14 Сентября 2013, 09:18:34 »
peregrine
Цитировать
И УМВР в любом варианте компилирования (всеми приведёнными в теме командами).
стрвнное дело.
Если я переставляю так
Код: (bash) [Выделить]
-o thread thread.cppто вообще не компилируется, а если так
Код: (bash) [Выделить]
-std=c++0x thread.cpp -o threadто получаю то же самое что и Kernel_ops.

Оффлайн peregrine

  • FSM
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 7215
  • Gentoo x64 Ubuntu 16.04.1 x64
    • Просмотр профиля
Re: c++: thread, operation not permited
« Ответ #14 : 14 Сентября 2013, 16:48:05 »
kupamaan, эти команды вы только что привели, уже после моего сообщения.

Пользователь решил продолжить мысль 14 Сентября 2013, 16:51:39:
Kernel ops, только что разглядел в чём дело. Дело в 13.10. Она пока недоделана, там всё что угодно можеь быть. Даже хидер без либы лежать может. Или для разных версий.
« Последнее редактирование: 14 Сентября 2013, 16:51:39 от peregrine »

 

Страница сгенерирована за 0.025 секунд. Запросов: 21.