Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 69, средняя оценка - 4.67
septe-mber
0 / 0 / 0
Регистрация: 02.01.2013
Сообщений: 123
#1

Многопоточность в C++11. std::thread - C++

02.04.2014, 02:54. Просмотров 13982. Ответов 20
Метки нет (Все метки)

Привет всем! использую таким образом многопоточность

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class A
{
public:
    void fun()
    {
 
    }
};
int main(int argc, char *argv[])
{
A p;
    std::thread th(p);
    th.join();
}
компилятор выдает ошибку ...

объясните пожалуйста, что делаю не так ? ( в многопоточности новичок )
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.04.2014, 02:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Многопоточность в C++11. std::thread (C++):

Std::thread автоматическая многопоточность - C++
Есть данный пример создания массива thread и инициализации его в цикле. #include<iostream> #include<sstream> #include<thread> ...

Использование std::function в std::thread - C++
Нужно вызвать function fnc в новом потоке. Как сделать? function <void(vector<char>)> fnc; void test(vector<char> data) { for...

Ошибка компиляции "no instance of constructor 'std::thread::thread' matches the argument list" - C++
Не могу сообразить почему возникает ошибка. У меня в классе есть метод, который должен работать в нескольких потоках одновременно. Вот он: ...

Boost::thread vs std::thread - C++
Доброго времени суток, решил углубить свои знания, и решил почитать про потоки, бустовые и те что в 11 стандарте приняли, с бустом все ясно...

std::thread - C++
Возник вопрос: как создать массив потоков (точнее, как его инициализировать). То есть, мне нужно примерно такое: std::thread...

Указатели и std::thread - C++
Всем здрасьте ! Возникла проблема в понимании ... Возможно я написал не в ту тему, но думаю тут есть эксперты. У меня есть класс...

20
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.04.2014, 03:11 #2
http://habrahabr.ru/post/182610/

Добавлено через 5 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <thread>
#include <iostream>
 
class A
{
public:
    void operator()()
    {
        std::cout << "AAA" << std::endl;
    }
};
 
int main(int argc, char *argv[])
{
    A p;
    std::thread th(p);
    th.join();
}
1
septe-mber
0 / 0 / 0
Регистрация: 02.01.2013
Сообщений: 123
02.04.2014, 03:36  [ТС] #3
alsav22, вот я одно не понимаю, передали функцию в std::thread thr(threadFunction); потом вызываем thr.join(), и создали новый поток. и какой выгрыш от этого ? я понимаю если вызвали thr.detach(); который делает поток фоновым и с связи с этим программа работает быстрее, т.к параллельно выполняется основной поток и фоновый поток ...
0
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.04.2014, 03:49 #4
Цитата Сообщение от septe-mber Посмотреть сообщение
и какой выгрыш от этого ?
В данном примере - никакой. Это только пример создания потока. Но можно, в main(), создать несколько таких потоков, передать в них функции для выполнения, main() заблокировать. Функции в потоках будут выполняться одновременно (условно).
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
02.04.2014, 11:49 #5
Цитата Сообщение от alsav22 Посмотреть сообщение
одновременно (условно).
почему условно? наличие нескольких ядер/процов и уже одновременность вполне реальная.
0
egor2116
340 / 371 / 42
Регистрация: 20.01.2013
Сообщений: 1,130
02.04.2014, 11:53 #6
А шины тоже у каждого ядра свои ?
все таки условная.
0
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
02.04.2014, 12:03 #7
Цитата Сообщение от egor2116 Посмотреть сообщение
А шины тоже у каждого ядра свои ?
окей, скажите это разработчикам многоядерных процессоров, что они копают вникуда, что данная технология это бред, что никакого выигрыша, и т.д и т.п
0
egor2116
340 / 371 / 42
Регистрация: 20.01.2013
Сообщений: 1,130
02.04.2014, 12:08 #8
я не говорил что нет ни какого выигрыша.
По логике вещей могоядер. проц. может выполняет несколько нитей одновременно, но когда данные идут дальше, шина ведь одна и передают они по очереди, а когда одно ядро то выполнилась нить и передалась остальные ждут пока проц. освободится. Я так понимаю и происходит выигрыщь за счет многоядерности.
0
Croessmah
Эксперт CЭксперт С++
13514 / 7672 / 866
Регистрация: 27.09.2012
Сообщений: 18,888
Записей в блоге: 3
Завершенные тесты: 1
02.04.2014, 12:15 #9
Цитата Сообщение от Tulosba Посмотреть сообщение
почему условно?
а может попасться машина с одним ядром. Всё будет псевдо-параллельно.
0
aLarman
02.04.2014, 12:16
  #10

Не по теме:

egor2116, всегда будет какое-то "узкое место"

0
egor2116
02.04.2014, 12:21
  #11

Не по теме:

egor2116, всегда будет какое-то "узкое место"


Не по теме:

Ну так я об этом и говорю.

0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
02.04.2014, 12:22 #12
Цитата Сообщение от egor2116 Посмотреть сообщение
А шины тоже у каждого ядра свои ?
Давайте ещё скажем, что монитор единственный к компю подключен, значит параллельность условная.
Не надо путать вычислительные части и каналы передачи данных между этими частями.
Если на однопроцессорной/ядерной архитектуре многопоточность/процессность достигается обязательным переключением контекстов, так что в единственный момент времени вычисляется только одна задача, то на многоядерных системах кол-во действительно одновременно выполняемых вычислений может достигать кол-ва ядер. А как данные будут переданы дальше - это уже совсем другая история.

Добавлено через 1 минуту
Цитата Сообщение от Croessmah Посмотреть сообщение
а может попасться машина с одним ядром.
А может и вообще без ядра Я собственно же написал не просто так:
Цитата Сообщение от Tulosba Посмотреть сообщение
наличие нескольких ядер/процов и уже одновременность вполне реальная
0
egor2116
340 / 371 / 42
Регистрация: 20.01.2013
Сообщений: 1,130
02.04.2014, 12:24 #13
Абсолютно согласен, я про это и писал. Я лишь хотел сказать что всегда будет узкое место. Это тоже как поставить кучу опер. памяти, но если шина ограничена каким то каналом то хоть 1мл Гб оперативки ставь улучшения не будет.
Кстати мониторов можно и несколько подключить
0
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.04.2014, 17:26 #14
Цитата Сообщение от Tulosba Посмотреть сообщение
почему условно?
Потому что в одних случаях действительно одновременно, в других нет. Зависит от многих причин. Можно, вместо "условно", другое слово подобрать.

Добавлено через 14 минут
Знатоки многопоточности, лучше объясните такое: есть код (ниже), если функции последоватьельно выполняются (Debug), время работы программы - 28сек. (при неполной, неравномерной, загрузке двух ядер), если - в двух потоках, то время работы, при 100%-й загрузке двух ядер, 128сек.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <thread>
#include <string>
#include <iostream>
 
void f1()
{
    for (int i = 0; i < 100000000; ++i)
    {
        std::string str = "absdef";
    }
}
 
void f2()
{
    for (int i = 0; i < 100000000; ++i)
    {
        std::string str = "qwert";
    }
}
 
int main(int argc, char *argv[])
{
    //f1();
    //f2();
 
    std::thread th1(f1);
    std::thread th2(f2);
    th1.join();
    th2.join();
 
}
0
stima
487 / 339 / 39
Регистрация: 22.03.2011
Сообщений: 1,084
Завершенные тесты: 2
02.04.2014, 17:31 #15
В код оптимизируеться во втором нет.
0
02.04.2014, 17:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.04.2014, 17:31
Привет! Вот еще темы с ответами:

Std::thread в классе - C++
Всем привет есть код #include&lt;thread&gt; #include&lt;iostream&gt; class SomeClass { public : SomeClass(); ...

Std::thread::detach() - C++
Что произойдет, если main - поток завершится раньше чем child.detach()? Добавлено через 3 минуты У меня программа просто завершилась...

Запутался с std::thread в классе - C++
Гуру, помогите новичку! Учусь кодить в потоках! Немного разообрался. Теперь задача - &quot;завернуть&quot; поток в отдельный класс (внешний...

Std::thread приостановка потока - C++
Есть прога в C++ Builder. Три функции описаные внизу запускаются в трех разных потоках. Первый поток генерирует данные для для двух других,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru