Форум программистов, компьютерный форум, киберфорум
Наши страницы
SFML
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
JohnBlack123
210 / 160 / 49
Регистрация: 09.12.2017
Сообщений: 518
1

Итеративное выполнение потоков?

21.07.2019, 09:55. Просмотров 946. Ответов 4

Здравствуйте. Учу SFML по документации.
Прочитал про потоки - sf::Thread, ранее с ними не сталкивался.

Как я понял - это несколько задач, которые выполняются параллельно. Вот что говорит по этому поводу документация:
A thread is basically a sequence of instructions that run in parallel to other threads.
Но, меня немного ввело в тупик то, что код должен быть поточно-ориентированным (thread-safe). Идея ясна: потоки выполняются параллельно друг другу и могут использовать общую память. Потому нужно делать программу поточно-ориентированной. Есть много разных вариантов, как это сделать. В документации пишут про sf::Mutex и про sf::Lock.
Теперь получается, что наши потоки работают последовательно, а не параллельно!
Ведь другой поток не будет запущен, пока предыдущий не отработает.
Тогда нарушается сама идея потоков про параллельную работу.

Вопрос: правильно ли я понял или потоки все равно будут работать параллельно?
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.07.2019, 09:55
Ответы с готовыми решениями:

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

Последовательное выполнение потоков
Здравствуйте. Есть два потока. Каждый меняет значение определенного ProgressBar`a. Как сделать так,...

Выполнение потоков по очереди
Здравствуйте, изучаю книгу Шилдта и возник вопрос в многопоточности, а именно этот пример: package...

Последовательное выполнение потоков
Господа, очень нужна ваша помощь, бьюсь уже третий день... 1. Необходимо чтобы сперва выполнялся...

Поочередное выполнение потоков
Есть задача из основного потока вызываются 2 дополнительных для вывода информации на экран 10 раз...

4
Ygg
1817 / 435 / 176
Регистрация: 10.02.2018
Сообщений: 945
21.07.2019, 12:06 2
Цитата Сообщение от JohnBlack123 Посмотреть сообщение
Вопрос: правильно ли я понял или потоки все равно будут работать параллельно?
Всё зависит от задачи и её реализации. Какие-то задачи можно распараллеливать, какие-то нет. Способы применения многопоточности весьма разнообразны. Иногда последовательное и параллельное могут существовать одновременно.

В случае последовательной обработки данных, можно провести аналогию с конвейером. Представьте движение ленты конвейера. Сперва на неё помещается вафельный стаканчик, дальше в стаканчик наливают мороженное, ещё дальше стаканчик оборачивается бумагой. Вроде как обработка идёт последовательно, но в то же время и параллельно. Когда в один стаканчик наливают мороженное, в тот же момент другой стаканчик оборачивают бумагой.
1
JohnBlack123
210 / 160 / 49
Регистрация: 09.12.2017
Сообщений: 518
21.07.2019, 12:09  [ТС] 3
Ygg, то есть, иногда можно выполнять действия параллельно, не добавляя код в sf:Mutex?
0
Ygg
1817 / 435 / 176
Регистрация: 10.02.2018
Сообщений: 945
21.07.2019, 13:03 4
Лучший ответ Сообщение было отмечено JohnBlack123 как решение

Решение

Цитата Сообщение от JohnBlack123 Посмотреть сообщение
то есть, иногда можно выполнять действия параллельно, не добавляя код в sf:Mutex?
Иногда можно.
К примеру, у вас есть большой массив. Первый поток сортирует первую половину массива, второй - вторую. Блокировки не нужны.
Или такой пример. У вас есть большой массив. Первый поток считает сумму его элементов, второй считает произведение тех же элементов. Блокировки не нужны.
Третий пример. У вас есть большой массив. Первый поток сортирует его, а второй считает сумму элементов. Тут блокировки нужны. Порядок выполнения операций над элементами массива между разными потоками не определён. Это значит что сперва первый поток может что-то изменить в массиве, а второй поток прочтёт данные после изменения. А может быть и наоборот. Сперва второй поток прочтёт элемент массива, а затем первый поток его изменит. Порядок действия без блокировок не определён, как и результат таких вычислений.
1
Croessmah
++Ͻ
15775 / 8916 / 1711
Регистрация: 27.09.2012
Сообщений: 21,919
Записей в блоге: 2
Завершенные тесты: 2
22.07.2019, 08:13 5
Энтони Уильямс - Параллельное программирование на C++ в действии
1
22.07.2019, 08:13
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.07.2019, 08:13

Выполнение нескольких потоков
Объясните каким образом выполняется данный код: class DaughterThread implements Runnable{ String...

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

Выполнение определенного числа потоков
Private Sub Button10_Click(sender As Object, e As EventArgs) Handles Button10.Click Dim...


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

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

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