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

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

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

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

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

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

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

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

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

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

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

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

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

Сформировать массив записав элементы одного массива на четные места, а другого на нечетные - C++
Привет друзья! Понимаю логику данной программы, но плохо знаю язык c++, прошу дать код хотя бы основы программы. Даны 2 массива...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NoMasters
Псевдослучайный
1747 / 1090 / 71
Регистрация: 13.09.2011
Сообщений: 3,121
12.02.2012, 16:07     Есть два потока и глобальный массив, могут ли потоки перепутать элементы глобального массива или другого контейнера? #2
Два потока используют две разных переменных, могут ли они перепутать элементы?

С одной стороны не могут потому как обращение к переменной однозначаено идентифицирует этот элемент; а с другой стороны, кто его знает, как на уровне ассемблера это реализовано?
nxnx
Формучанин
362 / 293 / 16
Регистрация: 02.11.2010
Сообщений: 1,234
12.02.2012, 19:15     Есть два потока и глобальный массив, могут ли потоки перепутать элементы глобального массива или другого контейнера? #3
могут, если третий поток поменяет значения этих элементов
kravam
быдлокодер
1693 / 880 / 44
Регистрация: 04.06.2008
Сообщений: 5,441
12.02.2012, 19:24  [ТС]     Есть два потока и глобальный массив, могут ли потоки перепутать элементы глобального массива или другого контейнера? #4
Нет, без всяких третьих потоков, только два потока рассматриваем.
niXman
Эксперт C++
3134 / 1446 / 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++
Всем доброго времени суток. Проблема в следующем. Пусть у нас есть двумерный массив. После некоторых пертубаций, в нем остаются только 0 и...

Сравнить поэлементно два одномерных массива, и через if определить, равны эти элементы или нет - C++
Люди помогите пожалуйста Нужно сравнить по элементам два одномерных массива и через if определить равны эти элементы или нет. If...

Дан массив. Найти в нем глобальный минимум или максимум - C++
Помогите пожалуйста! Очень нужно решение Дан массив А(М). Найти в нем глобальный минимум или максимум.


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

Или воспользуйтесь поиском по форуму:
kravam
быдлокодер
1693 / 880 / 44
Регистрация: 04.06.2008
Сообщений: 5,441
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     Есть два потока и глобальный массив, могут ли потоки перепутать элементы глобального массива или другого контейнера?
Ответ Создать тему
Опции темы

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