Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Общие вопросы по программированию, компьютерный форум
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.03.2015, 10:22   #1
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию Глобальные переменные и потоки

Всем доброго. Попалась мне одна задачка, никак в голову идеи по ее решению не приходят.
Итак: Есть некая система (ЯВУ, операционка, VM, еще что-то...), в которой первое правило - все переменные глобальные!
Это важное условие и его необходимо соблюдать.
(Критикам глобальности: Это задача академическая, расслабьтесь если напряглись). Глобальность переменных означает что переменка везде доступна, и ее значение всем видно. Вместе с этим система должна работать с потоками, в которых происходят некие события - вызываются функции, коим передаются параметры. Параметры ессно разные, зависит от события (стандартная работа многопоточного приложения кароч...)

Так вот задачка: Необходимо заставить систему корректно передавать параметры в событие, генерируемое потоком (потоками).
Например есть поток T1, который создает поток T2, в который передаются переменные P1 и P2. Сам Т1 после создания забывает о Т2, предоставляя ему свободу действий. И безусловно что по время работы очередного экземпляра Т2, Т1 может создать еще одну инстанцию Т2. И этому другому Т2 нужно передать параметры Р1 и Р2 с уже другим значением. Но как быть, если в системе все глобально, даже передаваемые в функцию параметры?

Вот такая вот головоломка. Переделывать систему локализуя переменные нельзя.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.03.2015, 10:39   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Массивы есть в системе? Если есть - его использовать для передачи элементов массива в качестве параметров
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 21.03.2015, 10:41   #3
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

звучит, как кая-то фигня.
если нет локальных переменных, то мой взгляд невозможно задать признаки по которым можно отличить один поток от другого. в такой системе возможен только один поток.

ну, или написать свой манагер потоков и памяти, беря за основу что все перемнные будут глобальными.

Последний раз редактировалось f.hump; 21.03.2015 в 10:51.
f.hump вне форума Ответить с цитированием
Старый 21.03.2015, 16:45   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
Массивы есть в системе?
Да. Конечно есть.
Цитата:
его использовать для передачи элементов массива в качестве параметров
Как? Массив ведь тоже переменная. А все переменные по условию глобальные
Т.е. другими словами эта система основана на уникализации имен.
Цитата:
звучит, как кая-то фигня.
Я ж просил расслабиться )
Специально написал что задача не практическая.
Это головоломка для светил науки. Потому и ТЗ такие необычные.
Цитата:
в такой системе возможен только один поток.
А вот я в это не верю. Потому и решил поискать решение исходя из таких условий.
Цитата:
написать свой манагер потоков и памяти, беря за основу что все перемнные будут глобальными.
Вот именно. Манагер это полюбас. Но вот вопрос - как же он должен работать?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.03.2015, 17:10   #5
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

глобальное в моем понимании - синоним статичного.

ну и нарпимер, манагер потоков в статической системе создает нужное кол-во потоков при старте, (никаких созданий/аллокаций/удалений/деаллокаций после старта), создает массив контекстов с кол-вом элементов равным кол-ву потоков. цикл первого потока работает с первым контекстом, цикл второго - со свторым контекстом... манагер создает ислючительную шару (в один момент времени только один пользователь) для обмена инфой между потоками. как-то так.
f.hump вне форума Ответить с цитированием
Старый 21.03.2015, 17:54   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
глобальное в моем понимании - синоним статичного.
Да. верно.
Цитата:
никаких созданий/аллокаций/удалений/деаллокаций после старта
Это не оговаривалось в условии, поэтому не гарантия что поток не будет создан во время выполнения.
Цитата:
создает массив контекстов с кол-вом элементов равным кол-ву потоков.
А имена элементов контекстов? Они же будут повторяться.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.03.2015, 18:08   #7
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

никаких имен.


Код:
const int thread_count, max_context_size;

char context_buffers[thread_count][max_context_size];

int Loop_0() {

    struct Context0 {

    };

    for (;(Context0 *)(context_buffers[0])->some_condition;)

        function_0((Context0 *)(context_buffers[0]), share);

    }
}

int Loop_1() {

    struct Context1 {

    };

    for (;(Context1 *)(context_buffers[1])->some_condition;)

        function_1((Context1 *)(context_buffers[1]), share);

    }
}

.......
f.hump вне форума Ответить с цитированием
Старый 21.03.2015, 18:37   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
никаких имен.
Как это никакких? А это что: context_buffers[1]
Это имя. Впрочем твое замечание вызвало одну маленькую догадку - подмену контекста параметров. Каждому потоку может быть передана копия списка переменных в виде ссылок. Однако некоторые ссылки будут подменены другими, что вполне может обеспечить иммитацию области видимости. Не исключено что это действительно может стать решением.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.03.2015, 19:26   #9
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

Цитата:
подмену контекста параметров. Каждому потоку может быть передана копия списка переменных в виде ссылок. Однако некоторые ссылки будут подменены другими, что вполне может обеспечить иммитацию области видимости. Не исключено что это действительно может стать решением.
ну, это как обычно делается: идентификатор контекста - локальное свойство потока, инициализируется при создании потока. когда все переменные глобальные, такое не работает.
f.hump вне форума Ответить с цитированием
Старый 21.03.2015, 19:34   #10
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

глобальный массив потоков и локальных переменных.
array of record h: thread; localdate: array of intger; end;
ну и конечно же одна отдельная переменная число имеющихся потоков

все потоки хранятся в массиве и рядом с ними (под тем же индексом) его данные.
зная индекс потока в массиве надо иметь возможность вычислить(определить) место его локальных данных.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 21.03.2015 в 19:40.
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Глобальные переменные. 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