Главная страница
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.065 c
15-1147932648
Nic
2006-05-18 10:10
2006.06.11
Чем можно скомпилировать


2-1148536009
ttt_111
2006-05-25 09:46
2006.06.11
Работа с DBGrid.


2-1148216522
Tempora
2006-05-21 17:02
2006.06.11
Есть ли компонент...


2-1148653615
Adios
2006-05-26 18:26
2006.06.11
пара вопросов


6-1135840770
Wolferio
2005-12-29 10:19
2006.06.11
Ping PC