Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.034 c
1-1091951641
gs
2004-08-08 11:54
2004.08.22
Создание XML файла из программы


1-1091793629
Sourse
2004-08-06 16:00
2004.08.22
Как перетаскивать файлы из проводника в программу


1-1091624200
race1
2004-08-04 16:56
2004.08.22
guid


6-1088090396
Dextor
2004-06-24 19:19
2004.08.22
Отправка звука


1-1091484317
denkop
2004-08-03 02:05
2004.08.22
"Правильное" завершение работы программы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский