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

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

Войти
Регистрация
Восстановить пароль
 
kravam
быдлокодер
1701 / 888 / 45
Регистрация: 04.06.2008
Сообщений: 5,498
#1

Есть два потока и глобальный массив, могут ли потоки перепутать элементы глобального массива или другого контейнера? - C++

12.02.2012, 15:11. Просмотров 837. Ответов 6
Метки нет (Все метки)

Начать с массивов, допустим
То есть ситуация такая: пусть имеется два потока и глобальный массив элементов int из двух элементов, один поток выводит в цикле значение нулевого элемента, а второй- значение первого; вот сижу думаю- могут ли они перепутать элементы?

С одной стороны не могут потому как обращение к элементу по индексу однозначаено идентифицирует этот элемент; а с другой стороны, кто его знает, как на уровне ассемблера это реализовано?

Да, естессно, речь пока не идёт об использовании мьютексов или других средств синхронизации.
(А потом когда разберёмся с массивами можно будет перейти на более сложные контейнеры, словари там множества и прочая)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.02.2012, 15:11
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Есть два потока и глобальный массив, могут ли потоки перепутать элементы глобального массива или другого контейнера? (C++):

Потоки, static. Доступ к полю класса из другого потока - C++
Добрый день! Суть: имею программу, в ней есть класс server, который содержит в себе поле session sessions, в определённый момент...

Разделить элементы одного массива на элементы другого массива, записать результат в третий массив - C++
Как разделить элементы одного массива на элементы другого массива? есть массив a и есть массив b. размеры a=b. ввожу новый массив,...

.NET 4.x [Потоки] Взаимодействие элементов формы из другого потока - C#
Есть такой код, который выполняется в backgroundWorker1: for (int i = 0; i < API._IDRequest.Count; i++) { ...

Дан целочисленный массив из n элементов. Элементы массива могут принимать произвольные значения - Pascal ABC
Дан целочисленный массив из n элементов. Элементы массива могут принимать произвольные значения от 0 до 1000. Написать программу, которая...

Ввести два одномерных массива и заменить нулями те элементы второго массива, которые есть в первом - C++
Ввести два одномерных массива и заменить нулями те элементы второго массива, которые есть в первом

Записать в массив элементы другого массива - C++
Дан массив B(15). Записать в массив элементы массива B>5. Помогите, пожалуйста, составить программу, до завтра нужно для зачёта.

6
NoMasters
Псевдослучайный
1764 / 1107 / 73
Регистрация: 13.09.2011
Сообщений: 3,143
12.02.2012, 16:07 #2
Два потока используют две разных переменных, могут ли они перепутать элементы?

С одной стороны не могут потому как обращение к переменной однозначаено идентифицирует этот элемент; а с другой стороны, кто его знает, как на уровне ассемблера это реализовано?
0
nxnx
Формучанин
362 / 293 / 16
Регистрация: 02.11.2010
Сообщений: 1,234
12.02.2012, 19:15 #3
могут, если третий поток поменяет значения этих элементов
0
kravam
быдлокодер
1701 / 888 / 45
Регистрация: 04.06.2008
Сообщений: 5,498
12.02.2012, 19:24  [ТС] #4
Нет, без всяких третьих потоков, только два потока рассматриваем.
0
niXman
Эксперт С++
3139 / 1451 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
12.02.2012, 21:33 #5
если размер массива не изменяется - ничего не перепутается.

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

другими словами, если как-то другой поток начнет изменять данные, тогда UB.
2
Paporotnik
383 / 227 / 7
Регистрация: 06.07.2011
Сообщений: 512
13.02.2012, 01:30 #6
будь оно иначе... думаю мультипоточность не имела бы никакого реального применения. ни во что верить нельзя было бы)
0
kravam
быдлокодер
1701 / 888 / 45
Регистрация: 04.06.2008
Сообщений: 5,498
13.02.2012, 12:56  [ТС] #7
Будь оно иначе, всё решалось бы средствами синхронизации, так что мультипоточность всё-таки какое-никакое применение имела бы. Но в одном вы правы- из-за такого маленького вопроса не стоило и огород городить. Пойдём дальше- если каждый поток изменяет соответствующий ему элемент массива. И сразу же: если мы имеем дело не с массивом, а, допустим, со словарём?
C++
1
2
3
4
map<char,int> first;
 
  first['a']=10;
  first['b']=30;
Допустим один поток изменяет
first['a'], а второй first['b'], могут ли они перепутать элементы?
0
13.02.2012, 12:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.02.2012, 12:56
Привет! Вот еще темы с ответами:

Ввод в массив элементы другого массива. - C++
Здравствуйте, в задаче нужно из текстовой строки удалить пробелы и переписать символы в другой массив vector. Пробелы я нашёл как убрать, а...

Есть последовательность массивов, содержащая в каждом элементы другого массива. Не могу понять, как их решить - MathCAD
Есть последовательность массивов содержащая в каждом элементы другого массива. Не могу понять как их решить. Кто может помочь?

Массив-ссылка на некоторые элементы другого массива - C++
У меня тут возникла идея. Есть большой двумерный массив, но не все строки этой матрицы нам нужны. Индексы нужных строк записаны в другой...

Дан целочисленный массив из 30 элементов.Элементы массива могут принимать произвольные целые значения.Опишите на русском - Pascal ABC
const N=30; var a:array of integer; i,j,min,min2,s:integer; begin for i:=1 to N do readln СРОЧНО ПОМАГИТЕ ПОЖАЛУЙСТА дан...


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

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

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