|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
21.03.2015, 10:22 | #1 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,792
|
Глобальные переменные и потоки
Всем доброго. Попалась мне одна задачка, никак в голову идеи по ее решению не приходят.
Итак: Есть некая система (ЯВУ, операционка, VM, еще что-то...), в которой первое правило - все переменные глобальные! Это важное условие и его необходимо соблюдать. (Критикам глобальности: Это задача академическая, расслабьтесь если напряглись). Глобальность переменных означает что переменка везде доступна, и ее значение всем видно. Вместе с этим система должна работать с потоками, в которых происходят некие события - вызываются функции, коим передаются параметры. Параметры ессно разные, зависит от события (стандартная работа многопоточного приложения кароч...) Так вот задачка: Необходимо заставить систему корректно передавать параметры в событие, генерируемое потоком (потоками). Например есть поток T1, который создает поток T2, в который передаются переменные P1 и P2. Сам Т1 после создания забывает о Т2, предоставляя ему свободу действий. И безусловно что по время работы очередного экземпляра Т2, Т1 может создать еще одну инстанцию Т2. И этому другому Т2 нужно передать параметры Р1 и Р2 с уже другим значением. Но как быть, если в системе все глобально, даже передаваемые в функцию параметры? Вот такая вот головоломка. Переделывать систему локализуя переменные нельзя.
I'm learning to live...
|
21.03.2015, 10:39 | #2 |
Старожил
Регистрация: 17.11.2010
Сообщений: 19,042
|
Массивы есть в системе? Если есть - его использовать для передачи элементов массива в качестве параметров
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
21.03.2015, 10:41 | #3 |
C/C++, Asm
Участник клуба
Регистрация: 02.03.2010
Сообщений: 1,323
|
звучит, как кая-то фигня.
если нет локальных переменных, то мой взгляд невозможно задать признаки по которым можно отличить один поток от другого. в такой системе возможен только один поток. ну, или написать свой манагер потоков и памяти, беря за основу что все перемнные будут глобальными. Последний раз редактировалось f.hump; 21.03.2015 в 10:51. |
21.03.2015, 16:45 | #4 | |||||
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,792
|
Цитата:
Цитата:
Т.е. другими словами эта система основана на уникализации имен. Цитата:
Специально написал что задача не практическая. Это головоломка для светил науки. Потому и ТЗ такие необычные. Цитата:
Цитата:
I'm learning to live...
|
|||||
21.03.2015, 17:10 | #5 |
C/C++, Asm
Участник клуба
Регистрация: 02.03.2010
Сообщений: 1,323
|
глобальное в моем понимании - синоним статичного.
ну и нарпимер, манагер потоков в статической системе создает нужное кол-во потоков при старте, (никаких созданий/аллокаций/удалений/деаллокаций после старта), создает массив контекстов с кол-вом элементов равным кол-ву потоков. цикл первого потока работает с первым контекстом, цикл второго - со свторым контекстом... манагер создает ислючительную шару (в один момент времени только один пользователь) для обмена инфой между потоками. как-то так. |
21.03.2015, 17:54 | #6 | |||
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,792
|
Цитата:
Цитата:
Цитата:
I'm learning to live...
|
|||
21.03.2015, 18:08 | #7 |
C/C++, Asm
Участник клуба
Регистрация: 02.03.2010
Сообщений: 1,323
|
никаких имен.
Код:
|
21.03.2015, 18:37 | #8 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,792
|
Цитата:
Это имя. Впрочем твое замечание вызвало одну маленькую догадку - подмену контекста параметров. Каждому потоку может быть передана копия списка переменных в виде ссылок. Однако некоторые ссылки будут подменены другими, что вполне может обеспечить иммитацию области видимости. Не исключено что это действительно может стать решением.
I'm learning to live...
|
|
21.03.2015, 19:26 | #9 | |
C/C++, Asm
Участник клуба
Регистрация: 02.03.2010
Сообщений: 1,323
|
Цитата:
|
|
21.03.2015, 19:34 | #10 |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,515
|
глобальный массив потоков и локальных переменных.
array of record h: thread; localdate: array of intger; end; ну и конечно же одна отдельная переменная число имеющихся потоков все потоки хранятся в массиве и рядом с ними (под тем же индексом) его данные. зная индекс потока в массиве надо иметь возможность вычислить(определить) место его локальных данных.
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 21.03.2015 в 19:40. |
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Глобальные переменные. | Predator199 | PHP | 17 | 03.11.2012 20:44 |
глобальные переменные | dieego6@gmail.com | C# (си шарп) | 3 | 03.10.2012 18:28 |
Глобальные переменные | kilogram | PHP | 2 | 30.03.2012 09:19 |
Глобальные переменные | lafaet12 | Microsoft Office Excel | 1 | 13.12.2011 15:39 |
Глобальные переменные | WiseElrond | C++ Builder | 3 | 31.10.2011 20:45 |