Потоки... Потоки? Потоки!, FPC |
Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.
Потоки... Потоки? Потоки!, FPC |
Archon |
Сообщение
#1
|
Профи Группа: Пользователи Сообщений: 618 Пол: Мужской Репутация: 24 |
Сел переписывать движок Doomed Game под потоки и... понял, что мои знания о потокобезопасности оставляют желать лучшего. Может быть кто-нибудь (volvo?) проведет несколько лекций на эту тему? Думаю, это не только меня может заинтересовать. Или может я просто задам свои вопросы?
-------------------- Close the World...txeN eht nepO
|
Archon |
Сообщение
#2
|
Профи Группа: Пользователи Сообщений: 618 Пол: Мужской Репутация: 24 |
Цитата Вот !!! Все, что нужно, ты уже сказал... Тебе надо просто гарантировать атомарность (неделимость) операции изменения значения переменной. Для этого вместо Inc() используй InterlockedIncrement() или InterlockedExchangeAdd(), обе функции описаны в System... Все Interlocked... функции гарантируют монопольное изменение значения переменной (к тому же, они и выполняются быстрее, Рихтер говорит о примерно 50 тактах против 1000, которые требуются для перехода в Kernel-mode из User-mode) А неделимость чтения кто гарантировать будет? Вдруг запись произойдет в середине процесса чтения? К тому же, Inc - это только пример. Да и на месте Integer может стоять какой-нибудь TList.Я набросал примерно вот что в псевдокоде: unit u_test; Добавлено через 1 мин. Кстати, еще ведь есть и прямой доступ к полю через property , так что там не только Inc. Исправил: добавил else в условиях. Сообщение отредактировано: Archon - -------------------- Close the World...txeN eht nepO
|
Текстовая версия | 9.05.2024 2:29 |