Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
74 / 37 / 3
Регистрация: 23.09.2012
Сообщений: 408
1

Параллельные потоки, вектора, переменные

28.01.2013, 13:58. Просмотров 1582. Ответов 12
Метки нет (Все метки)

Если у меня работают 2-3 параллельных потока и у всех есть доступ к одному классу.

1) нужно ли лочить этот класс на время работы в одном потоке, что бы остальные не могли к нему обращаться в это время?
2) что будет, если в вектор одновременно кладется 2 переменных в конец или одна кладется в конец, а другая удаляется с начала?
3) если лочить нужно, то как лучше это организовать? Просто дополнительную bool переменную?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.01.2013, 13:58
Ответы с готовыми решениями:

Параллельные потоки
Может кто-нибудь подсказать, как написать программу, в которой с какой-то определенной точки...

OPENmp параллельные потоки QT
#include <iostream> #include "omp.h" using namespace std; int main() { #pragma omp...

Заменить в коде параллельные главной, на параллельные побочной диагонали
Вот код,нужно сделать чтобы сортировались диагонали параллельные побочной, а не главной. помогите...

разбивка функции на параллельные потоки
В наличии - последовательная функция нахождения обратной матрицы методом Гаусса-Жордана, написанная...

12
42 / 42 / 4
Регистрация: 08.12.2010
Сообщений: 161
28.01.2013, 14:13 2
Цитата Сообщение от Kgfq Посмотреть сообщение
одному классу
ну наверное не к классу а к объекту, ну и для подобных задач существуют "готовые" решения вроде мютекса или семафора, да и в интернетах полно инфы на данную тему.
1
204 / 205 / 16
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
28.01.2013, 14:15 3
Цитата Сообщение от Kgfq Посмотреть сообщение
1) нужно ли лочить этот класс на время работы в одном потоке, что бы остальные не могли к нему обращаться в это время?
лочить нужно секции, где производится доступ к общим данным. Если класс (объект) является таким, то нужно операции с ним закрывать залочками.
Цитата Сообщение от Kgfq Посмотреть сообщение
2) что будет, если в вектор одновременно кладется 2 переменных в конец или одна кладется в конец, а другая удаляется с начала?
Если одновременно в 2 потоках без залочек, то результат неопределен.
Цитата Сообщение от Kgfq Посмотреть сообщение
3) если лочить нужно, то как лучше это организовать? Просто дополнительную bool переменную?
смотри про: mutex, semaphore, critical section, event, conditional variable ...
1
74 / 37 / 3
Регистрация: 23.09.2012
Сообщений: 408
28.01.2013, 14:19  [ТС] 4
dederkay, да-да, имел ввиду объект класса. Благодарю

Добавлено через 1 минуту
Почитал про мьютексы, как я понял - это bool, который как раз-таки не дает другим потокам влиять на залоченную переменную. Но что, если когда переменная не залочена, ее захватят 2 потока одновременно?
0
204 / 205 / 16
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
28.01.2013, 14:22 5
Цитата Сообщение от Kgfq Посмотреть сообщение
Почитал про мьютексы, как я понял - это bool
Это что-то типа переключателя. если 2 одновременно попытаются захватить, то захватит только один, а второй будет ждать пока первый не отпустит.
0
74 / 37 / 3
Регистрация: 23.09.2012
Сообщений: 408
28.01.2013, 14:25  [ТС] 6
villu, так если 2 одновременно захватят, то оба и пройдут.

Поток 1:
b = false;

Поток 2:
while(b);
b = true;
// сюда войдет

Поток 3:
while(b);
b = true;
// и сюда войдет
0
42 / 42 / 4
Регистрация: 08.12.2010
Сообщений: 161
28.01.2013, 14:26 7
Цитата Сообщение от Kgfq Посмотреть сообщение
ее захватят 2 потока одновременно?
как вам уже сказали, результат неопределим так просто, всё зависит от того что реально происходит, вот напрмер когда у нас только одно ядно то идет имитация многопоточности и тогда бывало так что, мы просто теряем память(например дважды выделив память не сохранив указатель), или же получаем ексепшен, да и ваще всё зависит от конкретного случая. Нельзя гарантировать стабильной работы.
0
1438 / 1319 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
28.01.2013, 14:31 8
Цитата Сообщение от Kgfq Посмотреть сообщение
так если 2 одновременно захватят, то оба и пройдут.
Средства синхронизации используют понятие атомарная операция
0
204 / 205 / 16
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
28.01.2013, 14:46 9
Цитата Сообщение от Kgfq Посмотреть сообщение
так если 2 одновременно захватят, то оба и пройдут.
яж сказал, что mutex это не совсем булевая переменная. Это объект, механизм. и в твоем примере даже близко не мьютекс.

Все выглядит примерно так:
C++
1
2
3
4
5
6
7
8
9
10
vector<int> data;
mutex data_lock;
 
...// thread code
{
  data_lock.lock();
  data.push_back(...);
   ...
  data_lock.unlock();
}
0
74 / 37 / 3
Регистрация: 23.09.2012
Сообщений: 408
28.01.2013, 15:08  [ТС] 10
Я гуглил, но ничего найти не удалось. Что делает mutex::try_lock?
0
204 / 205 / 16
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
28.01.2013, 15:10 11
Цитата Сообщение от Kgfq Посмотреть сообщение
try_lock
http://en.cppreference.com/w/c... x/try_lock
0
74 / 37 / 3
Регистрация: 23.09.2012
Сообщений: 408
28.01.2013, 15:15  [ТС] 12
villu, т.е. lock усыпляет поток до разблокировки, а try_lock лишь возвращает false в случае заблокированности, но не усыпляет?
0
204 / 205 / 16
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
28.01.2013, 17:22 13
ну не совсем усыпляет. Хотя можно и так выразиться. Вызов lock ждет, пока мьютекс не станет свободным. Потом сам его хватает и ждут все остальные.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.01.2013, 17:22

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

Параллельные потоки в QT
Здравствуйте! Я новичок в QT,ранее почти не работал с потоками, хотелось бы навести справки как...

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

Параллельные потоки
Доброго времени суток, знатоки! Есть задача, написать программу, со сложными и объемными...

Параллельные потоки и исключения
Здравствуйте всем! Хочу спросить у вас по поводу хорошей практики: работа параллельных...


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

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

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