Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

многопоточность и общие переменные [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 например) не надо, остальные - надо.


Наверх

Титульная страница Поиск, карта сайта Написать письмо