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

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

Integer-переменные и многозадачность... [D7, Win95/98, WinME, NT4, Win2k, WinXP]


Jolik ©   (2006-09-21 13:44:00) 

Как то здесь на форуме обсуждалось  - требуется ли контролировать доступ из разных ниток приложения к переменным типа integer. Пришли к выводу (и я сам до сих пор так считал) что это излишне, т.к. например приращение integer -переменной - атомарная операция (одна команда процессора) и прерваться не может.
Купил книжку - в ней написано, что ни фига, после загрузки переменной в регистр проца управление может быть отдано другой нитке (не совсем представляю как это может быть...) со всеми вытекающими последствиями и для изменения 32 битных переменных надо применять семейство функций InterlockedXXX.
Что думает народ по этому поводу?


Sha   (2006-12-13 22:10:00) [1]

Ник сам выбирал? :)


P@r@zit   (2006-12-13 20:56:00) [2]

Удалено модератором


Alex Konshin   (2006-09-22 08:14:00) [3]

Приращение переменной в памяти не является атомарной операцией.
Атомарными подобные операции будут только при выполении соответствющей машинной инструкции с префиксом lock. Смотрите описание этой команды в руководстве по ассемблеру Intel Pentium.
Если не писать на ассемблере, то нужно использовать функции Win API Interlocked*.
Про Boolean переменные то же самое. Собственно, важно что именно делается с этими переменными.


Наиль   (2006-09-21 16:01:00) [4]

Фраза
> после загрузки переменной в регистр проца управление может
> быть отдано другой нитке
совершено не противоречит
> т.к. например приращение integer -переменной - атомарная
> операция

т.к. помещение в регистр - это одна атомарная операция, и после неё может быть выполнена любая другая другая атомарная операция.


Ketmar   (2006-09-21 15:37:00) [5]

требуется. потому что многопроцессорность/HT могут сильно удивить автора, забывшего о контроле.


Игорь Шевченко   (2006-09-21 15:01:00) [6]


> Я думаю, что контролировать надо. Можно не беспокоиться
> только за boolean


А в чем разница между Integer и Boolean в данном контексте ?


DVM   (2006-09-21 14:57:00) [7]


> Что думает народ по этому поводу?

Я думаю, что контролировать надо. Можно не беспокоиться только за boolean
Тем не менее мне так и не удалось обнаружить какие-либо проблемы при одновременном обращении к одной и той же переменной целого типа из разных потоков. Но это ничего не значит.


Сергей М.   (2006-09-21 13:51:00) [8]


> Jolik ©   (21.09.06 13:44)


InterlockedXXX исключает возможность возникновения конфликтов в мультипроцессорной среде и при использовании НТ.


Наверх

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