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

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

Восстановить пароль Регистрация
 
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
12.02.2012, 15:11     Есть два потока и глобальный массив, могут ли потоки перепутать элементы глобального массива или другого контейнера? #1
Начать с массивов, допустим
То есть ситуация такая: пусть имеется два потока и глобальный массив элементов int из двух элементов, один поток выводит в цикле значение нулевого элемента, а второй- значение первого; вот сижу думаю- могут ли они перепутать элементы?

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

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

Ввод в массив элементы другого массива. C++
Локальный или глобальный массив векторов C++
C++ Дано два целочисленных массива Сформировать новый массив, который содержит элементы первого массива, которых нет во втором
Массив: Сформировать массив С, содержащий те элементы массива А, имеющие значения кратные М, которые есть в массиве В. C++
C++ Проверка. Все ли элементы массива имеют то или иное значение(всего их два)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NoMasters
Псевдослучайный
1737 / 1080 / 69
Регистрация: 13.09.2011
Сообщений: 3,094
12.02.2012, 16:07     Есть два потока и глобальный массив, могут ли потоки перепутать элементы глобального массива или другого контейнера? #2
Два потока используют две разных переменных, могут ли они перепутать элементы?

С одной стороны не могут потому как обращение к переменной однозначаено идентифицирует этот элемент; а с другой стороны, кто его знает, как на уровне ассемблера это реализовано?
nxnx
Формучанин
361 / 292 / 16
Регистрация: 02.11.2010
Сообщений: 1,226
12.02.2012, 19:15     Есть два потока и глобальный массив, могут ли потоки перепутать элементы глобального массива или другого контейнера? #3
могут, если третий поток поменяет значения этих элементов
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
12.02.2012, 19:24  [ТС]     Есть два потока и глобальный массив, могут ли потоки перепутать элементы глобального массива или другого контейнера? #4
Нет, без всяких третьих потоков, только два потока рассматриваем.
niXman
Эксперт C++
 Аватар для niXman
3133 / 1445 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
12.02.2012, 21:33     Есть два потока и глобальный массив, могут ли потоки перепутать элементы глобального массива или другого контейнера? #5
если размер массива не изменяется - ничего не перепутается.

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

другими словами, если как-то другой поток начнет изменять данные, тогда UB.
Paporotnik
383 / 227 / 7
Регистрация: 06.07.2011
Сообщений: 512
13.02.2012, 01:30     Есть два потока и глобальный массив, могут ли потоки перепутать элементы глобального массива или другого контейнера? #6
будь оно иначе... думаю мультипоточность не имела бы никакого реального применения. ни во что верить нельзя было бы)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.02.2012, 12:56     Есть два потока и глобальный массив, могут ли потоки перепутать элементы глобального массива или другого контейнера?
Еще ссылки по теме:

C++ Массив-ссылка на некоторые элементы другого массива
C++ Записать в массив элементы другого массива
Потоки, static. Доступ к полю класса из другого потока C++

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

Или воспользуйтесь поиском по форуму:
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
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'], могут ли они перепутать элементы?
Yandex
Объявления
13.02.2012, 12:56     Есть два потока и глобальный массив, могут ли потоки перепутать элементы глобального массива или другого контейнера?
Ответ Создать тему
Опции темы

Текущее время: 20:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru