Форум программистов, компьютерный форум, киберфорум
Boost C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/25: Рейтинг темы: голосов - 25, средняя оценка - 4.76
5 / 4 / 1
Регистрация: 16.08.2013
Сообщений: 110

Основы многопоточности

08.12.2013, 16:41. Показов 4991. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте уважаемые знатоки! Пытаюсь изучить потоки по официальной документации , плохо идёт.
Как правильно синхронизировать 2 потока чтобы получилось 0000011111.
вот код:
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
#include <boost/thread/thread.hpp>
#include <boost/thread/mutex.hpp>
#include <iostream>
#include <conio.h>
using namespace std;
boost::mutex mut;
 
void thread_0()
{
    for(int i = 0; i < 5; i++){
        cout<<'0';
    }
}
void thread_1()
{
    for(int i = 0; i < 5; i++){
        cout<<'1';
    }
}
 
void main()
{
    boost::thread trd0(&thread_0);
    boost::thread trd1(&thread_1);
    trd0.join();
    trd1.join();
    getch();
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.12.2013, 16:41
Ответы с готовыми решениями:

Основы ООП [С++]
Немного знаю Java, написал программу которая по заданным 2-м сторонам и углом между нимию Попробовал перевести на С++ #include...

Основы моделирования физических процессов
Здравствуйте! Я магистрант физ-теха. В &quot;экспериментальной&quot; части магистерской работы стоит молекулярная динамика (нужно написать программу...

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

8
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
08.12.2013, 18:56
Почитайте что делает mutex.
0
5 / 4 / 1
Регистрация: 16.08.2013
Сообщений: 110
08.12.2013, 19:52  [ТС]
Я думал, так:
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 <boost/thread/thread.hpp>
#include <boost/thread/mutex.hpp>
#include <iostream>
#include <conio.h>
using namespace std;
 
boost::mutex mut;
 
void thread_0()
{
    for(int i = 0; i < 5; i++){
        cout<<'0';
    }
    mut.unlock();
}
void thread_1()
{
    mut.lock();
    for(int i = 0; i < 5; i++){
        cout<<'1';
    }
}
 
void main()
{
    boost::thread trd0(&thread_0);
    boost::thread trd1(&thread_1);
    trd0.join();
    trd1.join();
    getch();
}
но в этом случае ответ всегда разный напримиер 1101101000 или 0101010110 а нужно чётко 0000011111

Добавлено через 31 минуту
господа помогите плиииз
0
 Аватар для igorrr37
2878 / 2025 / 991
Регистрация: 21.12.2010
Сообщений: 3,763
Записей в блоге: 9
08.12.2013, 19:52
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.hpp>
#include <iostream>
#include <conio.h>
using namespace std;
 
boost::mutex mut;
 
void thread_0()
{
    boost::lock_guard<boost::mutex> lg1(mut);
    for(int i = 0; i < 1000; i++)
    {
        cout<<'0';
    }
}
 
void thread_1()
{
    boost::lock_guard<boost::mutex> lg2(mut);
    for(int i = 0; i < 500; i++)
    {
        cout<<'1';
    }
}
 
void main()
{
    boost::thread trd0(&thread_0);
    boost::thread trd1(&thread_1);
    trd0.join();
    trd1.join();
    _getch();
}
lg1 захватывает мьютекс в конструкторе и освобождает в деструкторе, поэтому lg2 (и метод thread_1) ждут вызова деструктора lg1
1
5 / 4 / 1
Регистрация: 16.08.2013
Сообщений: 110
08.12.2013, 19:59  [ТС]
спасибо, а вы бы могли описать как это работает?
0
 Аватар для igorrr37
2878 / 2025 / 991
Регистрация: 21.12.2010
Сообщений: 3,763
Записей в блоге: 9
08.12.2013, 20:07
можно и так
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
34
35
#include <boost/thread.hpp>
#include <iostream>
#include <conio.h>
using namespace std;
 
boost::mutex mut;
 
void thread_0()
{
    mut.lock();
    for(int i = 0; i < 1000; i++)
    {
        cout<<'0';
    }
    mut.unlock();
}
 
void thread_1()
{
    mut.lock();
    for(int i = 0; i < 500; i++)
    {
        cout<<'1';
    }
    mut.unlock();
}
 
void main()
{
    boost::thread trd0(&thread_0);
    boost::thread trd1(&thread_1);
    trd0.join();
    trd1.join();
    _getch();
}
предыдущий пример делает то же самое: вызывает в конструкторе метод lock, а в деструккторе метод unlock
0
5 / 4 / 1
Регистрация: 16.08.2013
Сообщений: 110
08.12.2013, 21:22  [ТС]
от души благодарю

Добавлено через 1 час 1 минуту
рано обрадовался , не понимаю как код выше работает, объясните пожалуйста как этот же пример можно реализовать с помощью условных переменных из библиотеки boost/thread/condition.hpp... заранее благодарен)

Добавлено через 2 минуты
сразу скажу что в интернете облазил много примеров до сих пор не вкурил как потоки синхронизируются
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
10.01.2014, 23:37
вот такую книгу себе найдите:
Параллельное программирование на C++ в действии. Практика разработки многопоточных программ
Электронная книга
Автор книги: Энтони Уильямс

там о новом стандарте, в котором за основу был взят буст.
0
 Аватар для DiffEreD
1458 / 795 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
11.01.2014, 02:24
Цитата Сообщение от PanKiller Посмотреть сообщение
как этот же пример можно реализовать с помощью условных переменных из библиотеки boost/thread/condition.hpp
PanKiller, у вас что, склероз? Условные переменные

Добавлено через 3 минуты
Быстрое ознакомление с многопоточностью (С++11): Добро пожаловать в параллельный мир
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.01.2014, 02:24
Помогаю со студенческими работами здесь

по многопоточности
У меня есть анимация переходов... я её применил на боди и футер так сказать.. как сделать чтобы этот код выполнялся синхронно? public...

Организация многопоточности
Здравствуйте, не сильно понимаю в многопоточности, поэтому буду благодарен за любую помощь :) Стоит задача организовать архивацию...

Задача по многопоточности
Проходя тесты на certifications . ru наткнулся на такую задачу: При каких условиях метод check() вернет значение true, если вызов...

Синхронизации многопоточности
добрый день, пытаюсь сделать синхронизацию потом на примере producer\consumer, но что-то не выходит, я в consumere сделал ожидания...

Создание многопоточности
Всем привет. Ребят, столкнулся с проблемой при создании многопоточности. Программа компилируется, вроде работает, но на потоки не отвечает,...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru