![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 13 Всего: 85 |
Ок. щаз чонить сбацем.. ![]() Начнем с того, что Ваша идея хороша! Есть только одно НО, как я уже писал. Предположим, что необходимо чтобы при вызове конструктора первого экз-ра., уже массив был готов. Вот чтобы этого избежать, делаем так.
Этот код обязательно помещаем в тот же .h файл, что и CRC32. Это принципиально. Как это работает. Подключая наш CRC32.h мы создаем объект initor dummy; Создаем столько этих объектов, сколько раз мы подключили .h файлик. (В каждом модуле свой обектик initor dummy) Сам объет небольшой (1 байт), так-что накладные расходы не велики. Подключая его таким образом, мы гарантируем что код инициализации, будет всегда выполнен раньше любого глобального TCRC32 a; Ну вобщем где-то так. Эта идея не моя. Добавлено через 57 секунд Да, и таблица будет проинициализирована до входа в main(), когда поток один. |
|||
|
||||
volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 13 Всего: 85 |
Идея GremlinProg, тоже хороша, но там надо юзать мьютексы, а не interlockedexchange.
Ну это уже, имхо, не совсем чистый С++. Согласен. Впрочем, если еще до входа в маин есть куча потоков (а такое бывает?), то тогда мьютексы, делать нечего. хотя мой вариант с константами, всё-равно, мне ближе по душе. Проще надо быть... ![]() |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
задача была - избавиться от повторной инициализации таблицы, один вызов _InterlockedExchange ее решает, следующая задача - недопустить использования таблицы до ее инициализации, при чем тут-то _InterlockedExchange? естественно, здесь можно задействовать методы синхронизации доступа, подойдет простая установка события (событие-неавтомат) сразу после цикла инициализации и ожидание его в методе генерации, перед расчетом CRC -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 13 Всего: 85 |
повторная инициализация, это всего лишь оверхед. А вот использование до инициализации, это уже пипец всей программе. Не отрубают голову, когда хотят всего лишь избавиться от лишних волос имхо. |
|||
|
||||
GremlinProg |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
1. повторю вопрос: каким боком _InterlockedExchange относится к синхронизации доступа к таблице? если ни каким, то и не надо его поминать всуе, т.к. вводит в заблуждение 2. оверхед - когда атомарно пишем чего-нить куда-нить, не меняя ни бита, а расчет не всегда может быть атомарным (он им просто не обязан быть), т.е. надеяться в таком случае на оверхед несколько несерьезно
это к _InterlockedExchange тоже не относится, это можно отнести к генерации статической таблицы констант в MT среде, т.е. к самому методу, как таковому, по этому поводу по моему уже все высказались и пришли к выводу, что он в данном случае не актуален -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
||||
|
|||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Делаете в TCRC32 функцию init_table() и зовете ее в начале GetCRC32*
Но лучше конечно вбить таблицу константами ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |