![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Синхронизация
Lampa © (2004-06-25 20:09:00)В программе (т.е. в главном потоке) объявлена глобальная переменная, и создается второй поток, который изменяет значение этой переменной. Нужно синхронизировать такое действие?
Lampa (2004-06-25 22:03:00) [1]Ок, спасибо.
default (2004-06-25 21:47:00) [2]Lampa (25.06.04 21:27) [11]
ну у тя она в одном месте пишется, в другом читается
если так боишься в какие-нибудь критические секции работу с разделяемыми данными засунь
Lampa (2004-06-25 21:27:00) [3]
> default © (25.06.04 21:02) [10]
> Lampa (25.06.04 20:43) [9]
Даже если эта глоб. переменная находится в главном модуле (в первичном потоке)?
default (2004-06-25 21:02:00) [4]Lampa (25.06.04 20:43) [9]
в твоём случае пожалуй не надо
Lampa (2004-06-25 20:43:00) [5]
> default © (25.06.04 20:29) [7]
Да, но если у меня переменная String и мне надо ее изменить?
Значит надо таки синхронизацию выполнять.
А если у меня другая ситуация: в другом потоке крутится цикл, и если значение глобальной переменной равняется там например какому-то числу, то выполняется определенное действие.
В то время как из главного модуля программы, эту переменную можно изменить (чтобы условии в другом потоке сработало), так здесь нужно выполнять синхронизацию, и если да, то как?
default (2004-06-25 20:32:00) [6]Lampa (25.06.04 20:27) [6]
Windows система с вытесняющей многозадачностью, никогда не известно в какой момент управление будет передано на другой поток
(если бы система была с вытесняющей многозад-ью проблем бы не было - например поток выполнив какую-то свою работу(или еёчасть) посред-ом API ф-ии говорит ОС - можешь передавать упр-ие другому потоку, но сам пон-ешь тогда возможна была бы монополия на процессорное время)
default (2004-06-25 20:29:00) [7]кстати если будешь менять значение глобальной переменной через InterlockedExchangeAdd можешь не о чём не бояться
Lampa (2004-06-25 20:27:00) [8]это значит надо?
А что вообще будет если не синхронизировать потоки (тогда когда это надо), ведь и так работает же :) просто интересно знать, на самом деле понятно что так делать нельзя.
default (2004-06-25 20:25:00) [9]сам пронализ-уй ситуацию на возможные глюки
Lampa (2004-06-25 20:20:00) [10]
> Fay © (25.06.04 20:19) [3]
не понял :)
Lampa (2004-06-25 20:19:00) [11]Например?
В главном модуле программы, есть переменная (integer), второй запущенный поток может иногда изменять ее.
Правда есть еще и третий поток, который считывает эту переменную.
Fay (2004-06-25 20:19:00) [12]тогда ой 8)
default (2004-06-25 20:10:00) [13]зависит от ситуации