| Archon |
27.06.2009 21:13
Сообщение
#1
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 618 Пол: Мужской Репутация: 24 |
Сел переписывать движок Doomed Game под потоки и... понял, что мои знания о потокобезопасности оставляют желать лучшего. Может быть кто-нибудь (volvo?) проведет несколько лекций на эту тему? Думаю, это не только меня может заинтересовать. Или может я просто задам свои вопросы?
-------------------- Close the World...txeN eht nepO
|
![]() ![]() |
| Archon |
27.06.2009 22:29
Сообщение
#2
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 618 Пол: Мужской Репутация: 24 |
Цитата Какие методы планируется вызывать из разных потоков? Все? В общем случае не все. Но кто его знает, как потом понадобится. Поэтому давай попробуем сделать все.Цитата Как пытался сделать потокобезопасность? Пока никак не пытался, только доки читал.Цитата (ну, и более глобальный вопрос, как вообще обеспечивается межпоточное взаимодействие, знаешь?) Знаю на теоретическом уровне критические секции, события, мутексы, семафоры. Использовать не пробовал.Цитата Что именно (по-твоему) может быть опасного в тех методах, которые ты привел, почему нельзя прямо так взять и работать с объектом из разных потоков? Так... Думаю, проблемы могут возникнуть при обращении к данным (FData). Сам по себе вызов методов, кажется, безопасен (у потоков отдельные стеки). Причем если пересекутся две попытки записи, проблемы очевидны, но я слышал, что и чтение/запись тоже вызывает проблемы (рассинхронизация кэшей процессоров, например). Еще есть подозрение, что при наложении чтение/запись можно прочитать испорченное значение (вряд ли запись переменной происходит в 1 этап).PS Вообще, выкладываю и сам проект. Исходники надергал из Doomed Game, получилось подобие спрайтового движка. Он работает, но не потокобезопасен. Потому возможны ошибки. Несколько файлов с документацией удалять не стал, но они уже устарели. Прикрепленные файлы
project_t_snapshot.zip ( 855.02 килобайт )
Кол-во скачиваний: 1157-------------------- Close the World...txeN eht nepO
|
Archon Потоки... Потоки? Потоки! 27.06.2009 21:13
volvo Название темы - :good:
Нет, пока лекций на тему... 27.06.2009 21:20
Archon Окей. Тогда рассмотрим пример. Мое приложение сост... 27.06.2009 21:49
volvo Какие методы планируется вызывать из разных потоко... 27.06.2009 22:16
volvo Вот !!! Все, что нужно, ты уже сказал.... 27.06.2009 22:37
Archon А неделимость чтения кто гарантировать будет? Вдру... 27.06.2009 22:45
volvo Тогда, естественно, придется пользоваться другими ... 27.06.2009 23:25
Archon Я не знаю процедур :). Можно, конечно, WinApi, но ... 27.06.2009 23:39
Archon Кстати да, CriticalSection тут будет проще :).unit... 28.06.2009 6:20
Archon Обезопасил модуль u_log.pas. Теперь думаю над u_wi... 28.06.2009 8:36
volvo А чего его проверять, вроде выглядит нормально, на... 28.06.2009 8:57
Archon А какие существуют методы тестирования на потокобе... 28.06.2009 9:03
Archon Продолжаю исправлять классы. Работу с текстурами я... 28.06.2009 9:43
volvo Что-то не так... Смотри:
uses sysutils, classes,
... 28.06.2009 10:06
Archon Странно, я у себя в том же тесте таких ужасов не н... 28.06.2009 10:54
volvo Угу, тут прямо шалит, а если сделать:
unit u_test;... 28.06.2009 11:29
Archon А в чем разница? Разве что в TMultiReadExclusiveWr... 28.06.2009 11:44
volvo Кто сказал?
28.06.2009 11:51
Archon Цитата из того же файла версии 2.1 за август 2006.... 28.06.2009 12:47
volvo Так... Меняем стратегию...
Модуль:
Тестовая прогр... 28.06.2009 13:27
Archon Долго не отвечал, потому что устраивался на летнюю... 2.07.2009 18:12
volvo Кури этот код, это рекомендация Рихтера, а он плох... 2.07.2009 20:20![]() ![]() |
|
Текстовая версия | 8.12.2025 19:36 |