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

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

Вопрос про многопоточность.


Страницы:   1 2 3

@!!ex ©   (2007-12-24 18:46:00) 

Чем грозит такая ситуация:
есть boolean массив.
есть дополнительный поток, который постоянно перебирается все элементы массива и меняет их значения.
Из основного потока периодически берутся значения массива.
Никакой синхронизации нет...


oxffff   (2007-12-24 19:05:00) [41]


> @!!ex ©   (24.12.07 19:02) [7]


Представление памяти потоков запущенных на разных процессорах будет разным.

Memory Caching

When a processor writes to a memory location, the value is cached to improve performance. Similarly, the processor attempts to satisfy read requests from the cache to improve performance. Furthermore, processors begin to fetch values from memory before they are requested by the application. This can happen as part of speculative execution or due to cache line issues.


@!!ex   (2007-12-24 19:04:00) [42]

AV быть может или нет в данной ситуации?
Или это грозит только некорректностью данных?


oxffff   (2007-12-24 19:02:00) [43]


> DiamondShark ©   (24.12.07 19:02) [5]


Читай мат. часть.


@!!ex   (2007-12-24 19:02:00) [44]

> Если просто меняешь,то на многопроцессорных машинах потенциально
> это может стать причиной некорретного поведения.

тоесть там может читаться в тоже время, когда писаться?


oxffff   (2007-12-24 19:02:00) [45]


> @!!ex ©   (24.12.07 18:56) [2]


Решение - это обеспечение когерентности кэшей процессоров.


DiamondShark   (2007-12-24 19:02:00) [46]

Если главный поток только читает, а пишет только один доп. поток, то ничего страшного не произойдёт.


oxffff   (2007-12-24 19:00:00) [47]


> @!!ex ©   (24.12.07 18:56) [2]


Открой SDK см. раздел Synchronization

Synchronization and Multiprocessor Issues


oxffff   (2007-12-24 18:58:00) [48]


> @!!ex ©   (24.12.07 18:46)  


Если просто меняешь,то на многопроцессорных машинах потенциально это может стать причиной некорретного поведения.

Решение использование InterlockedExchange


@!!ex   (2007-12-24 18:56:00) [49]

procedure TKeys.Update;
var
 Index:integer;
begin
 GetKeyboardState(NewKeys);
 for Index:=0 to 255 do
   if NewKeys[Index] shr 7 <> OldKeys[Index] shr 7 then
     Keys[Index]:=NewKeys[Index] shr 7 = 1;

 CopyMemory(@OldKeys[0],@NewKeys[0],256);

end;


Я думаю может работать с отдельным массивом, а потом его копировать в основной?
ТОгда замена каждого жэлемента будет атомарной операцией?


oxffff   (2007-12-24 18:55:00) [50]


> @!!ex ©   (24.12.07 18:46)  


А как ты меняешь значения?


Страницы:   1 2 3

Наверх

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