![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопрос по потокам [D7, WinXP]
Русланка © (2005-09-01 15:48:00)Если у меня в главном модуле объявлены глобальные переменные, то сможет ли запущенный отдельный поток писать и читать данные из этих переменных?
begin...end (2005-09-11 15:57:00) [21]> Джо © (11.09.05 15:53) [68]
Пользователь, вообще-то, может командной строкой воспользоваться. Или командой runas.
Джо (2005-09-11 15:53:00) [22]
> [67] begin...end © (11.09.05 10:40)
Пожалуйста, приведите последовательность действий, при помощи которой пользователь будет запускать на выполнение в файловом менеджере или там Explorer'е файлы с расширением ".ovno".
begin...end (2005-09-11 10:40:00) [23]> Alexander Panov © (02.09.05 16:13) [36]
А зачем заменять? Подойдёт любая функция, т.к. результат любой функции соответствует самому себе. Следовательно, любая функция удовлетворяет требованию в [18].
> Defunct © (11.09.05 05:12) [61]
> нет не любое.
Любое.
> Джо © (11.09.05 05:18) [62]
> "проблемный код", о котором речь, даже не выполнится
Выполнится.
> Ибо, умная система виндовс не научена выполнять файлы с
> расширением ".ovno".
Научена.
Defunct (2005-09-11 08:08:00) [24]> Так что мое мнение, если начинаешь работать с потоками, лучше вначале досконально разобраться, а потом delphi запускать.
Так можно вообще никогда Delphi не запустить.
Мое мнение несколько отличается от вашего:
Самый ценный опыт - опыт полученный в результате устранения собственных ошибок.
Чтением книг полезного опыта не добудешь (кроме опыта чтения книг).
Нет ничего страшного в том, что вначале можно допускать ошибки.
Понимание приходит только с практикой.
atruhin (2005-09-11 07:42:00) [25]>>Defunct © (11.09.05 04:54) [60]
>> Допустим делаем тривиальный счетчик обращений к переменной >>спомощью inc(X)
Я делаю с помощью InterlockedExchangeAdd, и все ОК. :)
>>можно и без понимания. За меня уже все продумали и предоставили >>механизм синхронизации.
Вот так без понимания пишут, а потом на форум: помогите я тут, что то передрал но сам не знаю что (это не о ВАС а вообще).
Ведь не зря Windows существует немало способов синхронизации: критические секции, объекты ядра, атомарные операции. Отличаются возможностями, скоростью работы ...
Так что мое мнение, если начинаешь работать с потоками, лучше вначале досконально разобраться, а потом delphi запускать.
Defunct (2005-09-11 06:16:00) [26]Навеяно Fay ©
позволю себе пофантазировать.
1. Синхронизация - это процесс, при котором некоторый(ые) кодовый поток ожидает возникновения события в другом(их) кодовом(ых) потоке(ах).
2. Синхронизация - это режим доступа к ресурсу, при котором кодовый поток запрашивает статус ресурса. Если ресурс свободен - захватывает ресурс, иначе - приостанавливается и ожидает пока ресурс освободится. После окончания работы с ресурсом кодовый поток освобождает занятый ресурс.
3. Синхронизация - это метод последовательного(поочередного) доступа разных кодовых потоков к одному ресурсу.
В 2,3 imho отражен принцип работы крит. секций. И защищается не код, а данные от преждевременного захвата. 1 - можно интерпретировать как SendMessage где дейстительно происходит защита кода от преждевременного исполнения.
Fay (2005-09-11 05:41:00) [27]2 Игорь Шевченко © (09.09.05 11:03) [58]
Наукообразность определения не помогает понять суть.
Так, по-моему, лучшее определение понятия "лошадь" - это "Что такое лошадь, знают все". 8)
А вот причины, по которым фраза "не защита данных и уж тем более, не защита кода" включает "и уж тем более" мне понятны, т.к. из фразы следует, что синхронизация имеео отношение к защите данных (IMHO, эта связь совершенно не маскируется).
Джо (2005-09-11 05:18:00) [28]Добавлю к [60] Defunct ©
Гм, гм... Ну, изменит пользователь расширение у исполнимого файла. Это даже проблем никаких не вызовет. По той простой причине, что "проблемный код", о котором речь, даже не выполнится. Ибо, умная система виндовс не научена выполнять файлы с расширением ".ovno".
Defunct (2005-09-11 05:12:00) [29]begin...end © (02.09.05 15:45) [17]
> Любое
нет не любое. А только ".exe"
> ИШ, begin...end
Жаль нет такого смайлика, который выражает полное недоумение, несогласие с вашими постами, прозревание от прочитаного и легкое презрение, которое вызвано эмоциями от прочитанного. (С) а то бы я обязательно его поставил..
Вы рассуждаете о вседозволенности для пользователей, даже в таком вопросе как расширения исполнимых (системных) файлов. грустно.
Defunct (2005-09-11 04:54:00) [30]> А я вот не соглашусь. Далеко не всегда нужно это делать. Возьмем к примеру переменную типа integer, которой присваеваем значения и читаем, обе операции атомарные на уровне процессора. Зачем их синхронизировать?
Возьмем другой пример.
Изменяется строка String. Начали читать, часть прочитали и тут опа какой-то умный поток пишет. И в итоге когда дочитаем получем галиматью.
Третий пример.
переменная типа integer. Допустим делаем тривиальный счетчик обращений к переменной спомощью inc(X). Поток 1 прочитал X, поток 2 прочитал X, оба потока увеличили X на 1 и пишут обратно, в результате получим при записи увеличение на 1, а не на 2 как должно было быть.
>> Без четкого понимания того, что происходит при работе с данными >>из нескольких потоков, это не имеет смысла.
> Вот с этим согласен польностью
можно и без понимания. За меня уже все продумали и предоставили механизм синхронизации. Моя задача просто использовать его. И часто даже без понимания все будет работать. (с пониманием конечно лучше). Но ведь не обязательно знать теорию электродинамики для того чтобы щелкнуть выключателем и зажегся свет.
Игорь Шевченко © (02.09.05 15:54) [19]
Знаешь, вообще-то идея переименовывать ".exe" в ".govno" к добру обычно не приводит. И коль найдется такой пользователь который начнет эксперементировать с расширениями и потом пытаться запустить то, что он намутил, так флаг ему в руки, и пусть у него все глючит. Это уже сугубо его проблема.
atruhin (2005-09-10 20:57:00) [31]>>Alexander Panov © (02.09.05 11:45) [9]
>>Использовать функции синхронизации надо не только при записи, >>но и при чтении тех данных, обращение к которым происходит из >>нескольких потоков.
А я вот не соглашусь. Далеко не всегда нужно это делать. Возьмем к примеру переменную типа integer, которой присваеваем значения и читаем, обе операции атомарные на уровне процессора. Зачем их синхронизировать?
>>Без четкого понимания того, что происходит при работе с данными >>из нескольких потоков, это не имеет смысла.
Вот с этим согласен польностью
Игорь Шевченко (2005-09-09 11:03:00) [32]"Синхронизация
(от греч. synchronos - одновременный), приведение двух или нескольких процессов к синхроннонсти, т. е. к такому их протеканию, когда одинаковые или соответствующие элементы процессов совершаются с неизменным сдвигом по фазе друг относительно друга (например, речь оратора и переводчика при синхронном переводе) или одновременно (например, движения танцовщиц в кордебалете). С. периодических процессов достигается приведением к взаимному соответствию (например, к равенству или кратности) их периодов (частот) и установлением постоянного соотношения между их начальными фазами (постоянного взаимного сдвига фаз). Процессы, удовлетворяющие условиям синхронности, называются синхронными или синхронизированными; качество (свойство), которым они обладают, называется синхронизмом. Несинхронные процессы называются асинхронными."
Fay (2005-09-09 10:08:00) [33]2 Игорь Шевченко © (09.09.05 9:58) [56]
IMHO, "упорядочение действий" понятие пошире, нежели "синхронизация"
Игорь Шевченко (2005-09-09 09:58:00) [34]Fay © (09.09.05 01:28) [55]
> Интересно, как звучало бы определение у спортсменов(к)-синхронистов(к).
> 8
Как упорядочение действий, разумеется. Ничего нового.
Fay (2005-09-09 01:28:00) [35]2 Игорь Шевченко © (08.09.05 11:19) [54]
Интересно, как звучало бы определение у спортсменов(к)-синхронистов(к). 8)
Игорь Шевченко (2005-09-08 11:19:00) [36]
> Можно назвать это защитой данных, суть от этого не изменится.
> Я считаю, что значительно понятнее для новичков будет суть
> процесса синхронизации, нежели игра словами.
Для новичков - синхронизацией называется не защита данных и уж тем более, не защита кода. Синхронизацией называется упорядочение каких-либо действий, применительно к данной теме - упорядочение доступа к ресурсу, не более.
Игорь Шевченко (2005-09-08 11:10:00) [37]А вот неплохая демка была на предмет синхронизации:
http://www.schevchenko.net.ru/SRC/SuperMarket_50.zip
Alexander Panov (2005-09-07 12:17:00) [38]vidiv © (07.09.05 9:39) [51]
Переменные и объекты основного потока - это, если я правильно понял, считается одним ресурсом для остальных потоков,
В зависимости от логики программы.
Обращение к каждому ресурсу (в данном контексте - переменной или объекту, и их может быть несколько) может происходить в разных местах потоков, из разных функций, в разные моменты времени. Причем от того, что поток - основной, методы защиты не меняются.
Можно поступить двумя способами.
1. Создать одну критическую секцию для всех защищаемых ресурсов.
При этом при любомобращении к любому из этих ресурсов, кнеобходимо будет захватывать критическую секцию.
2. Для каждого ресурса создать своюкритическую секцию, и захватывать ее только при обращении к этому ресурсу.
Причем защищать нужно обращение к ресурсу из каждогокодового потока, в том числе и из основного.
vidiv © (07.09.05 9:39) [51]
И вообще что может являтся ресурсом?
Ресурсом может являться любой объект, которые необходимо использовать в программе.
Начиная с ОП, заканчивая дисковой памятью и внешними устройствами.устройствами
vidiv (2005-09-07 09:39:00) [39]
> Alexander Panov © (06.09.05 09:35) [50]
Переменные и объекты основного потока - это, если я правильно понял, считается одним ресурсом для остальных потоков, и для них достаточно одной крит. секции, правильно?
И вообще что может являтся ресурсом?
Alexander Panov (2005-09-06 09:35:00) [40]Lamer@fools.ua © (06.09.05 9:13) [49]
Спасибо за поправку.
vidiv © (06.09.05 5:21) [48]
Можно пояснить эти два условия?!
Первое условие означает, что если поток использует 2 разных ресурса, то и для синхронизации нужно использовать две разных критических секции - для каждого ресурса свою.
Второе условие говорит о том, что при работе с ресурсом из двух и более потоков необходимо, чтобы в каждом потоке использовалась единственная для всех потоков критическая секция. Эта секция должна быть создана до начала использования секции и работы с ресурсом.