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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.79
Avazart
Эксперт С++
7188 / 5362 / 280
Регистрация: 10.12.2010
Сообщений: 23,666
Записей в блоге: 17
#1

Нужно ли синхронизировать доступ к переменной из двух потоков? - C++

15.05.2012, 20:48. Просмотров 2602. Ответов 21
Метки нет (Все метки)

Допустим есть два потока: основной и вторичный.

1. И допустим есть глобальная переменная bool b;

Вопрос: является ли b разделяемым ресурсом? И нужно ли синхронизировать доступ к ней?
Например вариант когда b сигнализирует основному потоку о том что вторичный поток закончен...

2. Есть глобально объявленный std::vector. Вторичный поток переодически добовляет туда элементы.
Основной поток в это время выводит элементы на экран начиная с начала вектора ( вывод занимет определенное время так что вторичный поток обычно опережает работу основного).

Вопрос: Может ли возникнуть в таком случае проблемы? Например связанные с перераспределением памяти в векторе?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.05.2012, 20:48
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Нужно ли синхронизировать доступ к переменной из двух потоков? (C++):

Доступ к переменной только из двух функций. Возможно ли это? - C++
Две функции, не члены класса, одна из них должна писать в переменную, другая эту переменную читать и больше ни где эта переменная должна...

Получить доступ к переменной класса при наличии такого же имени переменной в функции - C++
Например, есть приватная переменная clientName в классе. Также есть точно такая же переменная в конструкторе этого класса. И мне нужно...

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

Нужно ли синхронизировать доступ на чтение? - Java SE
Здравствуйте.. Скажите пожалуйста, нужно ли синхронизировать доступ на чтение статического ресурса? Поясню примером: class...

Реализовать многопоточный доступ к N-ой переменной из N-го кол-во потоков - C#
Добрый день дорогие пользователи. В общем проблема состоит в том,что мне нужно реализовать многопоточный доступ к N-ой переменной из N-го...

Одновременный доступ к коллекции из двух потоков - C#
Здравствуйте. В программе открываю UDP-сокет, в который приходят данные с устройства. Вкратце, у меня выглядит это так: public void...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Avazart
Эксперт С++
7188 / 5362 / 280
Регистрация: 10.12.2010
Сообщений: 23,666
Записей в блоге: 17
19.08.2012, 01:17  [ТС] #16
типа QThread
А что прикручивать буст ради потоков? Да предположу что у QThread больше возможностей чем в boost

boost- монстр... его проблема целиком проинсталить, а по частям под виндой ...
0
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
19.08.2012, 01:21 #17
Avazart, Да нет конечно. Если используешь Qt и не нужно что-либо еще - используй QThread. Если используешь MSVC - используй что-нибудь оттуда. Можешь так же использовать средства ОС (хотя это и не слишком удобно), в остальных случаях std::thread или boost::thread, т.к. дефакто std::thread в текущем стандарте, то использование его в своих проетах однозначно, использование где-то в коммерческих проектах требует раздумий.

boost- монстр... его проблема целиком проинсталить, а по частям под виндой ...
Он инсталируется долго - факт. Но вот то, что "проблема целиком проинсталить" категорически не согласен.
0
Avazart
Эксперт С++
7188 / 5362 / 280
Регистрация: 10.12.2010
Сообщений: 23,666
Записей в блоге: 17
19.08.2012, 01:28  [ТС] #18
Работа с потоками в API OS низкоуровнева. Высокоуровневая работа с потоками является крайне важным фактором, ибо мы пишем на С++, а не на сях.
Просматривал boost/thread мне показалась что возможности урезаны сильно...и что удобнее как раз обратное ...

Кстати boost/mutex как я понял не совсем мютекс? Т.е. он не действует среди процессов.

Как-то читал книгу в ней говорилась о причине того что С++ не потдерживает многопоточность дабы предоставить возможность более тесно и эффективно взаимодействовать с ОС
0
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
19.08.2012, 01:39 #19
Avazart, Для межпроцессорного взаимодействия есть boost::interprocess, boost::thread к этому никаким боком не относится. Возможно, однако сейчас многопоточность введена в стандарт.
0
Avazart
Эксперт С++
7188 / 5362 / 280
Регистрация: 10.12.2010
Сообщений: 23,666
Записей в блоге: 17
19.08.2012, 01:44  [ТС] #20
Ну тогда это не соответствует назнанию в Win да и помойму в Linux, мютекс действует между процессами тем он и отличается от критических секций.
0
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
19.08.2012, 01:50 #21
Avazart, http://www.boost.org/doc/libs/1_50_0...anisms.mutexes дело в том, что в бусте все несколько разнесено. То есть либа которая работает с потоками - работает с потоками, которая с процессами - с процессами. В API очевидно все свалено в одну кучу.
0
Avazart
Эксперт С++
7188 / 5362 / 280
Регистрация: 10.12.2010
Сообщений: 23,666
Записей в блоге: 17
19.08.2012, 01:54  [ТС] #22
В API очевидно все свалено в одну кучу.
Ну это сложно назвать кучей... даже кучкой не назовешь...
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.08.2012, 01:54
Привет! Вот еще темы с ответами:

Синхронизация двух потоков с общей переменной - C#
добрый вечер, стоит следующая задача: Напишите программу, в которой первый поток построчно считывает содержимое некоторого текстового...

Организовать доступ к элементам очереди из двух потоков - C#
1 поток добавляет элементы в очередь. 2 дргуих должны счиать кждый элемент очереди. Как наилучшим образом организовать считываение...

Доступ к одному методу из двух потоков, критические секции - Delphi
Вопрос такой: имеется объект MyObject класса TExample, содержащего метод DrawSomething(Cnv: TCanvas). Сей метод используется в обработчиках...

Синхронизировать две группы потоков - Java SE
Здравствуйте. Пытаюсь написать такую программу: есть 2 группы потоков, например Thread1 и Thread2. Каждый поток из Thread1 посылает...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
19.08.2012, 01:54
Ответ Создать тему
Опции темы

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