Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.06.11;
Скачать: CL | DM;

Вниз

многопоточность и общие переменные   Найти похожие ветки 

 
Vir ©   (2006-05-01 15:01) [0]

Из нескольких потоков есть доступ на чтение/запись к глобальным пременных типа boolean, integer. Есть ли необходимость при доступе к переменным окружать их обектами синхронизации (Mutex или CriticalSection)?


 
Eraser ©   (2006-05-01 15:28) [1]


> Vir ©   (01.05.06 15:01)


> Есть ли необходимость при доступе к переменным окружать
> их обектами синхронизации (Mutex или CriticalSection)?

однобайтные переменные (boolean например) не надо, остальные - надо.


 
DrPass ©   (2006-05-01 16:22) [2]


> однобайтные переменные (boolean например) не надо, остальные
> - надо.

:-) Трехбайтные тоже не надо. Можно подумать, процессоры проектируют технические садисты, и при переключении контекстов у текущего потока выдергивают управление "на половине операции".


 
Eraser ©   (2006-05-01 16:52) [3]


> DrPass ©   (01.05.06 16:22) [2]

ну да ) вроде бы выравневание сейчас по 4 байта идёт, так что теоретически и 4 байтные не надо синхронизировать, хотя всё зависит от того, какие операции опроисходят при считывании/записи..


 
Leonid Troyanovsky ©   (2006-05-01 20:08) [4]


> Vir ©   (01.05.06 15:01)

> Из нескольких потоков есть доступ на чтение/запись к глобальным
> пременных типа boolean, integer. Есть ли необходимость при


Достаточно InterlockedExchange.

--
Regards, LVT.


 
Shaman_Naydak   (2006-05-01 21:32) [5]

Чтение синхронизировать не надо. (до 4 байт).
Запись синхронизировать надо. Ибо если уж работаете в нескольких потоках, то закладывайтесь на честную параллельность...
А какую именно, действительно зависит от характера взаимодействия..
InterlockedExchange для простейшего случая дейтвительно самое оно!


 
evvcom ©   (2006-05-02 08:43) [6]


> Чтение синхронизировать не надо. (до 4 байт).
> Запись синхронизировать надо.

в одном потоке:
if i <> 0 then Result := a div i; // только чтение
в другом:
EnterCriticalSection(...);
i := 0; // запись
LeaveCriticalSection(...);

Так что ли надо? Нетрудно догадаться, каков будет результат. :)
Все зависит от ситуации.



Страницы: 1 вся ветка

Текущий архив: 2006.06.11;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.043 c
15-1147670358
Ega23
2006-05-15 09:19
2006.06.11
С Днём рождения!


2-1148575203
fast2
2006-05-25 20:40
2006.06.11
Что мне надо доустановить на Вин98, чтоб можна было...


2-1148297951
Николай Владимирович
2006-05-22 15:39
2006.06.11
=> Странная штука с TreeView, не проходи мимо


4-1139742902
Sulimxar
2006-02-12 14:15
2006.06.11
Слежение за разрешением монитора


2-1148433968
rosl
2006-05-24 05:26
2006.06.11
update_sql