Форум программистов, компьютерный форум, киберфорум
Boost C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
Пес войны
 Аватар для NeonLost
111 / 88 / 22
Регистрация: 23.02.2012
Сообщений: 653

boost::thread объясните нубу

16.11.2012, 23:05. Показов 2140. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть код

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
#include <boost/thread/thread.hpp>
#include <iostream>
#include <windows.h>
using namespace std; 
 
void hello_world() 
{
  cout << "thread!" << endl;
  Sleep(5000);
}
void hello()
{
    cout << "hello" << endl;
}
 
int main() 
{
  boost::thread my_thread(&hello_world);
  boost::thread my_thread2(&hello);
  my_thread.join();
  my_thread2.join();
  boost::thread my_thread3(&hello);
 getchar();
  return 0;
}
при каждом запуске вывод не очевиден, то есть он может быть и
hello
thread!
и
thread!
hello
и
hellothread!
и
thread!hello
Чем программа руководствуется?..)
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.11.2012, 23:05
Ответы с готовыми решениями:

Объясните нубу про распараллеливание вычислений. thread
я попытался цикл разбить пополам на 2 потока, по идее скорость должна увеличиться в 2 раза, но, что мы видим... без потоков #include...

Boost thread
Здравствуйте! Помогите разобраться пожалуйста. Задача будет заключаться в том чтобы, создать поток и передать туда функцию и параметр,...

boost::thread
Здравствуйте. Есть два класса. Членом первого из классов является объект второго класса. В первом классе есть метод, в котором я хочу...

4
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
17.11.2012, 00:16
Я не знаю эту либу, но вероятно что программа руководствуется тем что потоки выполняются "параллельно"
т.е. потоки выполняются так как им ОС распределит время...
1
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
17.11.2012, 00:49
Лучший ответ Сообщение было отмечено как решение

Решение

NeonLost, Синхронизация где? cout - глобальный ресурс.

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
32
33
#include <boost/thread/thread.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
#include <iostream>
#include <windows.h>
using namespace std;
 
void hello_world(boost::mutex& mutex) 
{
  {
  boost::lock_guard<boost::mutex> lock(mutex);
  cout << "thread!" << endl;
  }
  boost::this_thread::sleep(boost::posix_time::seconds(5));
}
 
void hello(boost::mutex& mutex)
{
    boost::lock_guard<boost::mutex> lock(mutex);
    cout << "hello" << endl;
}
 
int main() 
{
  boost::mutex io_mutex;
  boost::thread my_thread(boost::bind(&hello_world, boost::ref(io_mutex)));
  boost::thread my_thread2(boost::bind(&hello, boost::ref(io_mutex)));
  my_thread.join();
  my_thread2.join();
  boost::thread my_thread3(boost::bind(&hello, boost::ref(io_mutex)));
  my_thread3.join();
  getchar();
  return 0;
}
4
Пес войны
 Аватар для NeonLost
111 / 88 / 22
Регистрация: 23.02.2012
Сообщений: 653
17.11.2012, 09:40  [ТС]
Воот, синхронизация это-то слово, которое я ждал...)

Добавлено через 8 часов 41 минуту
Цитата Сообщение от ForEveR Посмотреть сообщение
NeonLost, Синхронизация где? cout - глобальный ресурс.

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
32
33
#include <boost/thread/thread.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
#include <iostream>
#include <windows.h>
using namespace std;
 
void hello_world(boost::mutex& mutex) 
{
  {
  boost::lock_guard<boost::mutex> lock(mutex);
  cout << "thread!" << endl;
  }
  boost::this_thread::sleep(boost::posix_time::seconds(5));
}
 
void hello(boost::mutex& mutex)
{
    boost::lock_guard<boost::mutex> lock(mutex);
    cout << "hello" << endl;
}
 
int main() 
{
  boost::mutex io_mutex;
  boost::thread my_thread(boost::bind(&hello_world, boost::ref(io_mutex)));
  boost::thread my_thread2(boost::bind(&hello, boost::ref(io_mutex)));
  my_thread.join();
  my_thread2.join();
  boost::thread my_thread3(boost::bind(&hello, boost::ref(io_mutex)));
  my_thread3.join();
  getchar();
  return 0;
}
она кстати все равно меняет их местами(
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
17.11.2012, 14:38
NeonLost, И будет менять. Потоки запускаются как и говорил Avazart.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.11.2012, 14:38
Помогаю со студенческими работами здесь

queue boost thread
#define BOOST_THREAD_VERSION 2 #include &lt;boost/thread/thread.hpp&gt; #include &lt;boost/thread/xtime.hpp&gt; #include &lt;iostream&gt; #include...

Не линкуется проект с boost::thread
Здравствуйте! Пытаюсь собрать проект в Code::Blocks на Ubuntu. В проекте используется библиотека boost::thread. Файл...

boost::thread синхронизация с VCL
Здравствуйте, подскажите, как работать с VCL компонентами из boost::thread потока

Исключения в потоке Boost::thread
Имеется функция, которая вызывается в потоке. Внутри функции есть try-catch. Вне потока, если функцию вызывать из main(), исключения...

boost::thread() проблема с потоками.
Собственно создается два потока и запускаются следующим образом int main(). { thread1.join(); thread2.join(); ...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru