![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
многопоточность и общие переменные [D7, WinXP]
Vir © (2006-05-01 15:01:00)Из нескольких потоков есть доступ на чтение/запись к глобальным пременных типа boolean, integer. Есть ли необходимость при доступе к переменным окружать их обектами синхронизации (Mutex или CriticalSection)?
evvcom (2006-05-02 08:43:00) [1]
> Чтение синхронизировать не надо. (до 4 байт).
> Запись синхронизировать надо.
в одном потоке:
if i <> 0 then Result := a div i; // только чтение
в другом:
EnterCriticalSection(...);
i := 0; // запись
LeaveCriticalSection(...);
Так что ли надо? Нетрудно догадаться, каков будет результат. :)
Все зависит от ситуации.
Shaman_Naydak (2006-05-01 21:32:00) [2]Чтение синхронизировать не надо. (до 4 байт).
Запись синхронизировать надо. Ибо если уж работаете в нескольких потоках, то закладывайтесь на честную параллельность...
А какую именно, действительно зависит от характера взаимодействия..
InterlockedExchange для простейшего случая дейтвительно самое оно!
Leonid Troyanovsky (2006-05-01 20:08:00) [3]
> Vir © (01.05.06 15:01)
> Из нескольких потоков есть доступ на чтение/запись к глобальным
> пременных типа boolean, integer. Есть ли необходимость при
Достаточно InterlockedExchange.
--
Regards, LVT.
Eraser (2006-05-01 16:52:00) [4]
> DrPass © (01.05.06 16:22) [2]
ну да ) вроде бы выравневание сейчас по 4 байта идёт, так что теоретически и 4 байтные не надо синхронизировать, хотя всё зависит от того, какие операции опроисходят при считывании/записи..
DrPass (2006-05-01 16:22:00) [5]
> однобайтные переменные (boolean например) не надо, остальные
> - надо.
:-) Трехбайтные тоже не надо. Можно подумать, процессоры проектируют технические садисты, и при переключении контекстов у текущего потока выдергивают управление "на половине операции".
Eraser (2006-05-01 15:28:00) [6]
> Vir © (01.05.06 15:01)
> Есть ли необходимость при доступе к переменным окружать
> их обектами синхронизации (Mutex или CriticalSection)?
однобайтные переменные (boolean например) не надо, остальные - надо.