Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вопрос по потокам [D7, WinXP]


Страницы:   1 2 3 4 5

Русланка ©   (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 разных ресурса, то и для синхронизации нужно использовать две разных критических секции - для каждого ресурса свою.

Второе условие говорит о том, что при работе с ресурсом из двух и более потоков необходимо, чтобы в каждом потоке использовалась единственная для всех потоков критическая секция. Эта секция должна быть создана до начала использования секции и работы с ресурсом.


Страницы:   1 2 3 4 5

Наверх

Титульная страница Поиск, карта сайта Написать письмо