Форум: "Основная";
Текущий архив: 2004.08.22;
Скачать: [xml.tar.bz2];
ВнизThreadSafe доступ к переменным Найти похожие ветки
← →
iPod (2004-08-10 13:09) [0]Будет ли потокобезопасно обращение к глобальным переменным в основном потоке из него же, при условии, что множество дочерних потоков также обращаются к этим переменным синхронизированно?
← →
iPod (2004-08-10 13:27) [1]Неужели мастера не могут дать ответ на столь тривиальный вопрос?
← →
Skyle © (2004-08-10 13:32) [2]
> дочерних потоков также обращаются к этим переменным синхронизированно?
Если синхронизованно, то будет.
А главный поток тоже "синхронизованно" обращается?
← →
jack128 © (2004-08-10 13:32) [3]
> к глобальным переменным в основном потоке
глобальные переменные пренадлежат всему процессу, а не какому то отдельному потоку.
Если те нужна отдельная переменная для каждого потока, то см threadvar
> дочерних потоков
а что это такое ?
> обращаются к этим переменным синхронизированно
все обращения к переменной из всех потоков должны быть синхронизированы.
← →
iPod (2004-08-10 13:43) [4]Я читал, что НЕЛЬЗЯ синхронизировать доступ к переменным из ГЛАВНОГО потока! По этому и спрашиваю, а так бы просто Synchronize из основного потока да и делов то.
← →
Reindeer Moss Eater © (2004-08-10 13:48) [5]Не там и не то читал.
← →
Digitman © (2004-08-10 14:14) [6]
> iPod (10.08.04 13:43) [4]
> так бы просто Synchronize из основного потока
а смысл каков ? абсолютно никакого.. метод Synchronize(Метод) ставит Метод в очередь исполнения осн.потоком .. нонсенс здесь заключается в том, что метод Synchronize, будучи вызванный в осн.потоке, по твоей логике, будет "пытаться" поставить Метод в очередь самому себе.. на самом же деле Метод в этом случае будет выполнен немедленно (синхронно), как если бы он был вызван безо всяких Synchronize, т.е. как обычным образом вызванный метод
вообще говоря, нет особого резона синхронизировать мультипоточный доступ к глоб.переменной именно с пом. предлагаемого Борландом метода Synchronize - этот метод "заточен" несколько для иного применения и не слишком быстр сам по себе ... гораздо проще организовать крит.секцию и защитить ей обращения к переменной как со стороны госновного, так и со стороны каждого из доп.потоков, в которых предполагается обращение к защищаемой переменной
← →
iPod (2004-08-10 14:29) [7]Я и использую критические секции ;). Но я думаю, что если использовать крит. секции в осн. потоке, то тож смысла не будет или я не прав?
← →
jack128 © (2004-08-10 14:32) [8]
> Я и использую критические секции ;).
в этом случае крит секцию нужно использовать и основном потоке тоже
← →
iPod (2004-08-10 14:39) [9]Значит если я создам в классе гл формы переменную типа TRTLCriticalSection и в рамках этого класса буду вызывать методы EnterCriticalSection и LeaveCriticalSection, то это поможет разграничить доступ к глобальным переменным из ВСЕХ потоков?
← →
Digitman © (2004-08-10 14:40) [10]
> iPod (10.08.04 14:29) [7]
в случае с крит.секцией разницы между основным и дополн. потоками нет - ЛЮБОЙ без разбору поток, планирующий доступ к защищенной переменной, ОБЯЗАН пользоваться для этой цели соотв.крит.секцией, причем неважно каким потоком эта секция была изначально создана
← →
iPod (2004-08-10 14:53) [11]Как это неважно каким потоком эта секция была изначально создана? У меня например в каждом потоке создается отдельная критическия секция и она используется только в пределах того потока где и была создана. Вот и в главном потоке планирую создать крит. секцию и использовать ее только нем. Я разве не прав?
← →
jack128 © (2004-08-10 14:55) [12]
> У меня например в каждом потоке создается отдельная критическия
> секция и она используется только в пределах того потока
> где и была создана
ЛОЛ!!!! Ты не понимаешь зачем нужна критическая секция!!!
← →
iPod (2004-08-10 14:59) [13]Что ЛОЛ? У меня уже так давно - и прогармма работает нормально. Что, разве нужно ее создавать только в одном потоке??
← →
simpson © (2004-08-10 15:04) [14]http://rosigma.boom.ru/richter/head8.htm
или
http://softs.h10.ru/literature.shtml?topic=visual&book=1&page=head8.htm
← →
jack128 © (2004-08-10 15:05) [15]
> У меня уже так давно - и прогармма работает нормально
тебе повезло.
> разве нужно ее создавать только в одном потоке??
именно. И из всех потоков использовать именно эту крит секцию.
← →
iPod (2004-08-10 15:11) [16]Ну я и идиот :). Спасибо, сейчас буду пробовать.
← →
Мастер © (2004-08-10 15:13) [17]>iPod (10.08.04 14:59) [13]
Критическая секция служит для выполнения потокобезопасного кода.
Что это означает?
1. Для каждого участка кода, который должен быть потокобезопасным создается своя критическая секция(так как одновременно этот код может выполняться только одним потоком).
2. Доступ к этому коду может осуществляться из любого потока таким образом:EnterCriticalSection;
<КОД>
LeaveCriticalSection;
← →
jack128 © (2004-08-10 15:27) [18]
> Для каждого участка кода, который должен быть потокобезопасным
> создается своя критическая секция
не совсем так. крит секция создается для каждого РЕСУРСА, который нужно защитить от многопотокового доступа. Например для переменной или группы переменных, которые нужно рассматривать как единый ресурс. Или блок памяти. А вот участки кода, которые осуществляют доступ к этому ресурсу уже нужно обрамлять в Enter/LeaveCriticalSection
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.08.22;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.036 c