LINUX.ORG.RU

Не работает многопоточность на с++11

 


1

0

Доброе время! Столкнулся с такой проблемой: написал helloWorld #include <iostream> #include <thread>

class background_task { public: void operator()() const { std::cout << «Hello, Multithreaded World!\n»; } };

int main() { background_task bgtask; std::thread mythread(bgtask); mythread.join(); return 0; }. При компиляции g++ -Wall -pthread -std=c++11 вылетает ошибка «terminate called after throwing an instance of 'std::system_error' what(): Enable multithreading to use std::thread: Operation not permitted Aborted (core dumped) »



Последнее исправление: cetjs2 (всего исправлений: 2)

int main() { background_task bgtask; std::thread mythread(bgtask); mythread.join(); return 0; }. При компиляции g++ -Wall -pthread -std=c++11 вылетает ошибка «terminate called after throwing an instance of 'std::system_error' what(): Enable multithreading to use std::thread: Operation not permitted Aborted (core dumped) »

няня я у них поел

emulek
()
$ ./a.out 
Hello, Multithreaded World!

$ g++ --version | grep g++
g++ (Debian 4.8.2-15) 4.8.2
quest ★★★★
()
Ответ на: комментарий от Practolog

Да, и ось у меня xubuntu 13.10 x64

В ней ненастоящя многопоточность, потому не работает. Ставь дебиан, там настоящая.

Ну а если серьезно, попробуй опции отсюда: http://stackoverflow.com/questions/19463602/compiling-multithread-code-with-g

yoghurt ★★★★★
()
#include <iostream>
#include <thread>

class background_task
{
public:
	void operator()() const
	{
		std::cout << "Hello, Multithreaded World!\n";
	}
};

int main(int argc, char ** argv)
{
	background_task bgtask;
	std::thread mythread(bgtask);
	mythread.join();
	return 0;
}

g++ thread11.cpp  -Wall -pthread -std=c++0x
./a.out
Hello, Multithreaded World!
g++ --version
g++ (GCC) 4.4.4 20100726 (Red Hat 4.4.4-13)
cat /etc/centos-release
CentOS Linux release 6.0 (Final)

УМВР ;)

slackwarrior ★★★★★
()
Последнее исправление: slackwarrior (всего исправлений: 1)
Ответ на: комментарий от Eddy_Em

Спасибо за наблюдательность! Вы очень помогли! З.ы. наверное правильный ник занят

Practolog
() автор топика
Ответ на: комментарий от slackwarrior

g++ hello.cpp -Wall -pthread -std=c++0x ./a.out terminate called after throwing an instance of 'std::system_error' what(): Enable multithreading to use std::thread: Operation not permitted Аварийный останов (сделан дамп памяти)

Practolog
() автор топика
Ответ на: комментарий от Practolog

Очень понятно

MAN(1) Manual pager utils MAN(1)

NAME man - an interface to the on-line reference manuals

SYNOPSIS man [-C file] [-d] [-D] [--warnings[=warnings]] [-R encoding] [-L locale] [-m system[,...]] [-M path] [-S list] [-e extension] [-i|-I] [--regex|--wildcard] [--names-only] [-a] [-u] [--no-subpages] [-P pager] [-r prompt] [-7] [-E encoding] [--no-hyphenation] [--no-justification] [-p string] [-t] [-T[device]] [-H[browser]] [-X[dpi]] [-Z] [[section] page ...] ... man -k [apropos options] regexp ... man -K [-w|-W] [-S list] [-i|-I] [--regex] [section] term ... man -f [whatis options] page ... man -l [-C file] [-d] [-D] [--warnings[=warnings]] [-R encoding] [-L locale] [-P pager] [-r prompt] [-7] [-E encoding] [-p string] [-t] [-T[device]] [-H[browser]] [-X[dpi]] [-Z] file ... man -w|-W [-C file] [-d] [-D] page ... man -c [-C file] [-d] [-D] page ... man [-hV]

Eddy_Em ☆☆☆☆☆
()
Ответ на: Очень понятно от Eddy_Em

g++ hello.cpp -Wall -pthread -std=c++0x

./a.out

terminate called after throwing an instance of 'std::system_error'

what(): Enable multithreading to use std::thread: Operation not permitted Аварийный останов (сделан дамп памяти)

Ребят, за это прошу прощения конечно, недавно на лорге.

Practolog
() автор топика
Ответ на: комментарий от yoghurt

Походу правда с осью проблема. Каких пакетов может недоставать? Недавно увидел что нет пакетов libboost, установил - не помогло

Practolog
() автор топика

Зачем помогать человеку, который не осилил LORCODE, и не уделил время на нормальное форматирование сообщения?

Chaser_Andrey ★★★★★
()
Ответ на: комментарий от Chaser_Andrey

Прошу прощения еще раз, я новичок. При возможности исправить читаемость своих предыдущих постов непременно бы сделал это.

Practolog
() автор топика
Ответ на: комментарий от Practolog
g++ 1.cpp -pthread -std=c++0x && ./out 
Hello, Multithreaded World!

У тебя, похоже, не хватает чего-то.

Eddy_Em ☆☆☆☆☆
()

Недавно увидел что нет пакетов libboost, установил - не помогло

Может ось посоветуете но такую чтобы без особых плясок дальнейших с ней работать?

Practolog

Да это тролль. Не кормите его.

DELIRIUM ☆☆☆☆☆
()

и даже так:

cat 1.cpp 
#include <iostream>
#include <thread>

static int N = 0;

class background_task{
  public: 
    background_task(){threadN = N++;}
    background_task(int N0){threadN = N0;}
    void operator()() const {
      std::cout << "Hello, Multithreaded World Number " << threadN << "!!!\n";
    }
  
  private:
    int threadN = 0;
};

int main(){
  background_task bgtask, task2, task3(12);
  std::thread mythread(bgtask);
  std::thread mythread2(task2);
  std::thread mythread3(task3);
  mythread.join();
  mythread2.join();
  mythread3.join();
  return 0;
}

g++ 1.cpp -Wall -Werror -pthread -std=c++11  && ./a.out 
Hello, Multithreaded World Number 0!!!
Hello, Multithreaded World Number Hello, Multithreaded World Number 112!!!
!!!

Eddy_Em ☆☆☆☆☆
()

Нафига, кстати, вообще нужен std::thread::join? Специально для threaded hello world или я не понимаю что-то? Вот какой прок от треда, что полностью блочит вызывающий его код, проще просто функцию вызвать же.

vazgen05 ★★★
()
Ответ на: комментарий от Practolog

Прошу прощения еще раз, я новичок.

Это не смягчающий, а отягчающий фактор. Ведь подросший новичок начинает конкурировать со старичками, которые его выучили на свою же голову. Поэтому никто не заинтересован тебя тут учить, ни один нормальный человек. А ты ещё имеешь наглость пренебрегать оформлением кода - за такое вообще убить мало.

anonymous
()
Ответ на: комментарий от Eddy_Em

Спасибо, запустил, все та же ошибка.

Господа, никакого троллинга!! Не принимайте сказанную мною очередную глупость за троллинг. Я НОВИЧОК

Practolog
() автор топика
Ответ на: комментарий от vazgen05

Снимаю вопрос. Гугл помог.
Я почему-то думал что тред в самом join стартует.

vazgen05 ★★★
()
Ответ на: комментарий от anonymous

Тем не менее в линуксе это не мешает мне быть нубом

Practolog
() автор топика
Ответ на: комментарий от anonymous

А ты ещё имеешь наглость пренебрегать оформлением кода - за такое вообще убить мало.

В лорге я тут неделю всего, не учел специфику оформления с двойными пробелами. Еще раз прошу прощения

Practolog
() автор топика
Ответ на: комментарий от Practolog

Ребят, за это прошу прощения конечно, недавно на лорге.

в сишечке ты тоже недавно. Не рано-ли pthread применяешь?

emulek
()
Ответ на: комментарий от Practolog

Может ось посоветуете но такую чтобы без особых плясок дальнейших с ней работать?

ага. Slackware.

emulek
()
Ответ на: комментарий от emulek

в сишечке ты тоже недавно

Откуда блин такие выводы? С чего вы делаете вывод что если я не прочитал LORCODE я нуб в си? Вы знаете, я еще зубы неделю не чистил. Это значит что мне стоит начать писать на питоне? И у кого то повернулся после этого написать что я тролль?

Practolog
() автор топика
Ответ на: комментарий от Practolog

Наверное вопрос исчерпан, всем спасибо

Practolog
() автор топика
Ответ на: комментарий от Practolog

Откуда блин такие выводы?

потому что сишник в 10 раз больше читает кода, чем пишет. Потому сишник очень ценит то, что код легко читать. Потому сишник оформляет код так, что его удобно читать другим(и себе, любимому).

Хотя возможно ты просто тролль, и просто вбросил кучу говна на вентилятор.

Это значит что мне стоит начать писать на питоне?

ну попробуй. Оно полезно для тебя и твоего стиля(который возможно у тебя будет. Когда-нибудь).

emulek
()
Ответ на: комментарий от Practolog

Откуда блин такие выводы?

Вот я, например, нуб в С++, однако, за 2 минуты гуглежа подправил твой пример так, чтобы каждый поток имел свой идентификатор. Правда, до меня так и не дошло, куда там пихают тело потока. В сях все намного проще делается. И писанины левой не надо.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Так зачем в три потока? Нужно всего лишь выписать «Hello World». Какие три потока?) Вопрос простой, не вдавайтесь в красоту кода, правильность и прочее. Это просто пример лектора Яндекса. Скажите пожалуйста просто каких пакетов или чего еще не хватает. Собирал кстати я сначала по лекторовскому точно работающему Makefile, та же ерунда. Господа, дело не в коде!

#include <iostream>

#include <thread>

class background_task
{
public:
	void operator()() const
	{
		std::cout << "Hello, Multithreaded World!\n";
	}
};

int main(int argc, char ** argv)
{
	background_task bgtask;
	std::thread mythread(bgtask);
	mythread.join();
	return 0;
}

g++ thread11.cpp -Wall -pthread -std=c++0x

Practolog
() автор топика
Ответ на: комментарий от Practolog

Ясен пень, дело не в коде, а в тебе! Ты нафига бубунту вместо линукса поставил? Теперь сам мучься.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от slackwarrior

Двойная кавычка вокруг скобки дает одинарную на выходе без раскрытия тега: [[code]] на выходе дает [code].

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от slackwarrior

Конечно. ТСу нужно: 1) выучить ЯП, 2) выучить теги [code], [inline] и т.п., 3) научиться гуглить вопросы по бубунте, либо вместо этого поделия поставить какой-нибудь дистрибутив линукс.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от anonymous

g++ -Wl,--no-as-needed hello.cpp -std=c++11

./a.out

terminate called after throwing an instance of 'std::system_error'

what(): Enable multithreading to use std::thread: Operation not permitted Аварийный останов (сделан дамп памяти)

Practolog
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.