До C6 такой проблемы нет. Переключение тредов производится только во время выполнения ACCEPT. В С6 такая проблема есть, но ничего специфического - это стандартная проблема конкурентного доступа к общим ресурсам. Нужно всего лишь использовать механизмы синхронизации процессов.
... лучше вообще избегать глобальных переменных без thread.
Озвучено это было задним числом для C6.
Это не задним числом. Это именно начиная с С6 и актуально. И "избегать" следует только если лень разбираться с существом вопроса. С ними тоже можно вполне нормально работать, только нужно соблюдать специальные правила.
WBR,
Nick Tsigouro. MailTo:
Nick@arsis.ru
(Добавление)
Nick, для меня это актуально! А мог бы подсказать как быть в 6-ке для
ситуаций когда File_Name:
1. Во всех процессах одинакова и появляется желание использовать ее без thread.
2. Может изменяться для отдельных процессов.
И что теперь для каждой нити я должен делать каждый раз активацию каждого File_Name? Напиши плиз что прочитать на эту тему попроще. У меня пока работает при File_Name без thread для случая 1. На пример можешь сослаться без АБС только, чтоб код был виден!
--
С уважением,
SAN mailto:
vgsan@yandex.ru
F1 - Advanced Topics - Thread model documentation
Если кратенько, то
INCLUDE(‘CWSYNCHC.INC’),ONCE
FileNameVarLock CriticalSection
FileNameVarLock.Wait()
FileNameVar = ...
Open(File)
FileNameVarLock.Release()
2. Стало быть файл будешь переоткрывать. Тогда все то же самое.
И еще, если FileNameVar может изменяться по ходу дела, то _любую_ работу с
FileNameVar нужно брать в скобки FileNameVarLock.Wait() -
FileNameVarLock.Release()
И что теперь для каждой нити я должен делать каждый раз активацию каждого ...
Для каждого физического открываемого файла. Если все треды работают с одним файлом, то есно переменная инициализируется один раз до запуска тредов и голова больше не болит. Голова начинает болеть когда ты хочешь открывать в разных тредах разные файлы одной и той же структуры. Тогда ты должен перед открытием вписывать в переменную соответствующее имя файла. Вот тут и нужна синхронизация.
WBR,
Nick Tsigouro
Написал: ClaList(2)