Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
1

Длительность обращения к переменным

16.11.2011, 23:54. Показов 2874. Ответов 21
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Товарищи, есть ли разница между локальными и глобальными переменными в длительности чтения/записи в них?

И еще такой вопрос: у меня несколько потоков работают с одной переменной. Имеет ли смысл для каждого из них создать свою копию этой переменной, чтобы они не обращались к одной и той же области памяти? Будет ли выигрыш в быстродействии?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.11.2011, 23:54
Ответы с готовыми решениями:

Используя идею обращения числовой матрицы написать программу для обращения булевой матрицы
Задание. Используя идею обращения числовой матрицы написать программу для обращения булевой...

Длительность аудиофайла
В принципе в этом-то и весь вопрос. Возможно ли средствами стандартной библиотеки С++ вытащить...

длительность сессии
у меня виртуальный хост и если ничего не делать минут 10 то сессия пропадает, погуглил и нашел вот...

Длительность импульса
Всем привет, как посчитать длительность импульса ? Задача состоит в определении интеграла вообще,...

21
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
17.11.2011, 00:01 2
Цитата Сообщение от Svinina Посмотреть сообщение
Товарищи, есть ли разница между локальными и глобальными переменными в длительности чтения/записи в них?
локальные могут быть быстрее за счет того, что компилятор их расположит в регистрах процессора
глобальные же могут находиться только непосредственно в памяти
однако момент сей слишком тонкий и незначительный


Цитата Сообщение от Svinina Посмотреть сообщение
И еще такой вопрос: у меня несколько потоков работают с одной переменной. Имеет ли смысл для каждого из них создать свою копию этой переменной, чтобы они не обращались к одной и той же области памяти? Будет ли выигрыш в быстродействии?
так логика работы же поменяется

вообщем это не то место, где нужно искать ускорение
0
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
17.11.2011, 00:09  [ТС] 3
так логика работы же поменяется
Что ты имеешь ввиду под этим?

Я юзаю POSIX. Допустим у меня два потока выполняют некоторые вычисления, причем в этих вычислениях постоянно участвует некоторый коэффициент k. Я могу его объявить глобально, присвоить ему значение, а дальше запустить свои два потока и в них его использовать, либо же я могу объявить его глобально, присвоить значение, запустить потоки, далее в самом начале потока объявить свою переменную, присвоить ей значение k и дальше все вычисления производить с ней. Разница только в том, что в первом случае оба потока постоянно будут лезть по одному адресу, а во втором каждый из них будет лезть по своему.
0
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
17.11.2011, 00:14 4
у каждого потока есть свой стек, то есть переменная будет в стеке
доступ к ней по скорости будет такой же как к глобальной

все же я не представляю, чтобы можно было заметить разницу по времени обращения
0
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
17.11.2011, 00:21  [ТС] 5
Цитата Сообщение от alex_x_x Посмотреть сообщение
у каждого потока есть свой стек, то есть переменная будет в стеке
доступ к ней по скорости будет такой же как к глобальной

все же я не представляю, чтобы можно было заметить разницу по времени обращения
Вопрос то мой в чем заключается: будут ли они конкурировать за глобальную переменную? В очередь становиться, если одновременно к ней обращаются? Или они будут ее параллельно считывать?
0
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
17.11.2011, 00:26 6
смотреть синхронизацию потоков
к переменной они могут обращаться как захотят
1
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
17.11.2011, 00:33  [ТС] 7
Так как они захотят к ней обращаться?) Для меня сейчас ключевой вопрос именно это.
0
1186 / 542 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
17.11.2011, 01:21 8
Svinina, асинхронно они с ней будут обращаться, когда процессу она понадобится - тогда и обратятся
1
385 / 229 / 12
Регистрация: 06.07.2011
Сообщений: 512
17.11.2011, 01:35 9
что значит "конкурировать"? какой процесс первый подаст команду на чтение переменной, тот и прочтет. и не о чем им конкурировать.
а вот запись-чтение переменной - совсем другое дело.
0
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
17.11.2011, 01:38  [ТС] 10
Gepar, а что произойдет, если два потока одновременно обратятся к одной и той же памяти? Одновременно они считают данные, или один поток подождет другого?

Добавлено через 2 минуты
Цитата Сообщение от Paporotnik Посмотреть сообщение
что значит "конкурировать"? какой процесс первый подаст команду на чтение переменной, тот и прочтет. и не о чем им конкурировать.
а вот запись-чтение переменной - совсем другое дело.
Ну под "конкуренцией" я понимаю соревнование за обладание неким ресурсом, одновременное обладание которым невозможно.

Вообще, наверное, мой вопрос слишком низкоуровневый...
0
114 / 114 / 13
Регистрация: 29.04.2010
Сообщений: 240
17.11.2011, 02:02 11
Не будет просто так один поток другого ждать. Может такое случится, что один поток запишет половину данных, второй поток - вторую половину. В итоге полный бред в памяти и краш программы.

Гуглите синхронизацию потоков. Локи, мютексы и т.д. Тут все писать слишком уж долго.
0
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
17.11.2011, 02:07  [ТС] 12
Цитата Сообщение от PraZuBeR Посмотреть сообщение
Не будет просто так один поток другого ждать. Может такое случится, что один поток запишет половину данных, второй поток - вторую половину. В итоге полный бред в памяти и краш программы.

Гуглите синхронизацию потоков. Локи, мютексы и т.д. Тут все писать слишком уж долго.
Я сейчас не про запись, а про чтение.
При записи понятно, что без мьютексов не обойтись.
0
114 / 114 / 13
Регистрация: 29.04.2010
Сообщений: 240
17.11.2011, 02:11 13
С одновременным чтением проблем быть не должно. Если есть 100% гарантия что в эту переменную никто в это время не пишет.
1
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
17.11.2011, 02:15  [ТС] 14

По ходу ответ я так и не получу...
Ладно, в любом случае спасибо всем, кто поучаствовал в обсуждении.
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
17.11.2011, 11:28 15
Цитата Сообщение от Svinina Посмотреть сообщение
И еще такой вопрос: у меня несколько потоков работают с одной переменной. Имеет ли смысл для каждого из них создать свою копию этой переменной, чтобы они не обращались к одной и той же области памяти? Будет ли выигрыш в быстродействии?
Не быстродействием занимайся, а назначением. Почему переменная одна? Если это способ обмена инфой между потоками, то после записи одним потоком, остальные должны получить результат, разделив переменную на копии ты будешь вынужден добавить ещё копирующий поток, который однозначно посадит на себя часть процессорного времени, которое можно было бы полезно использовать, прога тормознётся, если же переменная должна использоваться не для связи, а просто ты захотел использовать совпадающее имя, то разорвать связь, этой переменной создаваемую, можно только разделив переменную на копии.

Добавлено через 1 минуту
Цитата Сообщение от PraZuBeR Посмотреть сообщение
Если есть 100% гарантия что в эту переменную никто в это время не пишет.
Реализуемая механизмами синхронизации.
0
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
17.11.2011, 20:02  [ТС] 16
Не быстродействием занимайся, а назначением. Почему переменная одна? Если это способ обмена инфой между потоками, то после записи одним потоком, остальные должны получить результат, разделив переменную на копии ты будешь вынужден добавить ещё копирующий поток, который однозначно посадит на себя часть процессорного времени, которое можно было бы полезно использовать, прога тормознётся, если же переменная должна использоваться не для связи, а просто ты захотел использовать совпадающее имя, то разорвать связь, этой переменной создаваемую, можно только разделив переменную на копии.
Если цель - быстродействие, заниматься надо им, нет?))
Переменная это коэффициент, используемый в вычислениях. Задается он один раз, при запуске программы, потоки ее только читают.
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
17.11.2011, 20:23 17
Цитата Сообщение от Svinina Посмотреть сообщение
Если цель - быстродействие, заниматься надо им, нет?))
Быстрее, но совсем не то = хуже. Сначала надо сделать, что надо, а не что не надо, а потом быстрее/медленнее. Так вот, если тебе нужна одна переменная, то копии будут или тормознее, или не то. А если копии и нужны, то одна будет и не то и не быстрее.
0
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
17.11.2011, 20:30  [ТС] 18
taras atavin, я не понял, что ты написал.
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
17.11.2011, 20:40 19
Ну вот представь себе: ты хочешь съесть мороженное, а тебе предлагают пруд, поближе к дому, чем озеро. Барахтаясь в воде ты мороженное если и съешь, то времени уйдет больше. А если хочешь искупаться, то нафига сначала готовить мороженное?
0
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
17.11.2011, 21:02  [ТС] 20


taras atavin, ладно, еще раз объясню в чем состоял вопрос.
Есть ячейка в памяти. В этой ячейке лежат данные. И есть два параллельных процесса, которые одновременно из этой ячейки пытаются считать данные.
ВНИМАНИЕ, ВОПРОС: как данные из ячейки будут считаны процессами? Параллельно, или последовательно?
Все, больше меня ничего не интересует, ни алгоритм, ни альтернативные способы организации параллельности, ни синхронизация, забудь про все это.
0
17.11.2011, 21:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.11.2011, 21:02
Помогаю со студенческими работами здесь

WMP (длительность)
Приветствую все.Я к Вам со следующим вопросом: В своей программе использую WindowsMediaPlayer,...

Длительность mp3
Всем доброго время суток! Требуется узнать длительность файлов .mp3 Вообще моя цель сохранить...

длительность песочницы
Как долго новый сайт не вывести по СЧ и ВЧ в топ10?

Найти длительность сигнала
помогите решить


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru