Форум: "Начинающим";
Текущий архив: 2005.10.16;
Скачать: [xml.tar.bz2];
ВнизВопрос по потокам Найти похожие ветки
← →
tesseract © (2005-09-03 18:52) [40]>>Синхронизация - защита участка кода программы(не данных), >>использующего(читающего или модифицирующего) некий ресурс, >>обращение к которому происходит из нескольких потоков.
Я бы сказал что это защита данных от непредсказуемого изменения, в целом и fay не зря волнуется.
← →
Alexander Panov © (2005-09-03 23:59) [41]Fay © (03.09.05 3:03) [39]
Выдирать фразу из контекста нехорошо. Это демагогические приемы.
Кроме того, вот эта фраза
Мастера, неужели это не бред?
Если нет, то это заoщита кода ОТ ЧЕГО?
А если бред, то где уже этот долбаный "синий карандаш"?!
говорит о том, что у тебя недостаточное понимание этой темы.
← →
Alexander Panov © (2005-09-04 00:01) [42]tesseract © (03.09.05 18:52) [40]
Я бы сказал что это защита данных от непредсказуемого изменения, в целом и fay не зря волнуется.
"..от непредсказуемого изменения..."
Вот здесь ответь, изменения кем или чем? Это и будет ответом.
"...fay не зря волнуется."
Читай [41]
← →
Fay © (2005-09-04 00:19) [43]2 Alexander Panov © (03.09.05 23:59)
Нельзя ли тогда узнать, какой был контекст? Просто не могу ничего придумать.
Подобное уже встречалось в "Как приостановить поток" - какой там контекст?
Такой-же? КАКОЙ?!
> Синхронизация - защита участка кода программы(не
> данных), использующего(читающего или модифицирующего)
> некий ресурс, обращение к которому происходит из
> нескольких потоков.
Подобная формулировка допускает разночтения? Не верю.
← →
Fay © (2005-09-04 00:20) [44]К [43]
> Вот здесь ответь, изменения кем или чем? Это и будет
> ответом.
А вот такой ответ можно понимать вАщЕ как угодно.
← →
Alexander Panov © (2005-09-04 00:21) [45]Fay © (04.09.05 0:19) [43]
Сравни 2 цитаты:
"Синхронизация - защита участка кода программы(не данных)"
и
> Синхронизация - защита участка кода программы(не
> данных), использующего(читающего или модифицирующего)
> некий ресурс, обращение к которому происходит из
> нескольких потоков.
Отличается. Верно ведь?
← →
Alexander Panov © (2005-09-04 00:22) [46]Fay © (04.09.05 0:20) [44]
А вот такой ответ можно понимать вАщЕ как угодно.
А ты ответил на этот вопрос?
← →
Alexander Panov © (2005-09-04 00:28) [47]Еще раз повторю...
Доступ к любому ресурсу возможен только "кем-то". Этот "кто-то" - кодовый поток, точнее - кусок этого кодового поока, в котором происходит обращение к ресурсу, т.е. вполне конкретный код.
Вот этот "кто-то" - это код, который необходимо включить в процесс синхронизации.
Можно назвать это защитой данных, суть от этого не изменится. Я считаю, что значительно понятнее для новичков будет суть процесса синхронизации, нежели игра словами.
← →
vidiv © (2005-09-06 05:21) [48]
> 1. Код, использующий разные ресурсы, защищается разными
> критическими секциями
> 2. Код в каждом потоке, использующий один и тот же ресурс,
> защищается одной и той же критической секцией. Эта критическая
> секция должна быть известна каждому потоку до начала использования.
Можно пояснить эти два условия?!
← →
Lamer@fools.ua © (2005-09-06 09:13) [49]>>Alexander Panov © (02.09.05 11:45) [9]
>try
CS.Enter;
finally
CS.Leave;
end;
Хороший пример того, как не надо делать. А надо так:CS.Enter;
try
// ...
finally
CS.Leave;
end;
← →
Alexander Panov © (2005-09-06 09:35) [50]Lamer@fools.ua © (06.09.05 9:13) [49]
Спасибо за поправку.
vidiv © (06.09.05 5:21) [48]
Можно пояснить эти два условия?!
Первое условие означает, что если поток использует 2 разных ресурса, то и для синхронизации нужно использовать две разных критических секции - для каждого ресурса свою.
Второе условие говорит о том, что при работе с ресурсом из двух и более потоков необходимо, чтобы в каждом потоке использовалась единственная для всех потоков критическая секция. Эта секция должна быть создана до начала использования секции и работы с ресурсом.
← →
vidiv © (2005-09-07 09:39) [51]
> Alexander Panov © (06.09.05 09:35) [50]
Переменные и объекты основного потока - это, если я правильно понял, считается одним ресурсом для остальных потоков, и для них достаточно одной крит. секции, правильно?
И вообще что может являтся ресурсом?
← →
Alexander Panov © (2005-09-07 12:17) [52]vidiv © (07.09.05 9:39) [51]
Переменные и объекты основного потока - это, если я правильно понял, считается одним ресурсом для остальных потоков,
В зависимости от логики программы.
Обращение к каждому ресурсу (в данном контексте - переменной или объекту, и их может быть несколько) может происходить в разных местах потоков, из разных функций, в разные моменты времени. Причем от того, что поток - основной, методы защиты не меняются.
Можно поступить двумя способами.
1. Создать одну критическую секцию для всех защищаемых ресурсов.
При этом при любом обращении к любому из этих ресурсов, к необходимо будет захватывать критическую секцию.
2. Для каждого ресурса создать свою критическую секцию, и захватывать ее только при обращении к этому ресурсу.
Причем защищать нужно обращение к ресурсу из каждого кодового потока, в том числе и из основного.
vidiv © (07.09.05 9:39) [51]
И вообще что может являтся ресурсом?
Ресурсом может являться любой объект, которые необходимо использовать в программе.
Начиная с ОП, заканчивая дисковой памятью и внешними устройствами.устройствами
← →
Игорь Шевченко © (2005-09-08 11:10) [53]А вот неплохая демка была на предмет синхронизации:
http://www.schevchenko.net.ru/SRC/SuperMarket_50.zip
← →
Игорь Шевченко © (2005-09-08 11:19) [54]
> Можно назвать это защитой данных, суть от этого не изменится.
> Я считаю, что значительно понятнее для новичков будет суть
> процесса синхронизации, нежели игра словами.
Для новичков - синхронизацией называется не защита данных и уж тем более, не защита кода. Синхронизацией называется упорядочение каких-либо действий, применительно к данной теме - упорядочение доступа к ресурсу, не более.
← →
Fay © (2005-09-09 01:28) [55]2 Игорь Шевченко © (08.09.05 11:19) [54]
Интересно, как звучало бы определение у спортсменов(к)-синхронистов(к). 8)
← →
Игорь Шевченко © (2005-09-09 09:58) [56]Fay © (09.09.05 01:28) [55]
> Интересно, как звучало бы определение у спортсменов(к)-синхронистов(к).
> 8
Как упорядочение действий, разумеется. Ничего нового.
← →
Fay © (2005-09-09 10:08) [57]2 Игорь Шевченко © (09.09.05 9:58) [56]
IMHO, "упорядочение действий" понятие пошире, нежели "синхронизация"
← →
Игорь Шевченко © (2005-09-09 11:03) [58]"Синхронизация
(от греч. synchronos - одновременный), приведение двух или нескольких процессов к синхроннонсти, т. е. к такому их протеканию, когда одинаковые или соответствующие элементы процессов совершаются с неизменным сдвигом по фазе друг относительно друга (например, речь оратора и переводчика при синхронном переводе) или одновременно (например, движения танцовщиц в кордебалете). С. периодических процессов достигается приведением к взаимному соответствию (например, к равенству или кратности) их периодов (частот) и установлением постоянного соотношения между их начальными фазами (постоянного взаимного сдвига фаз). Процессы, удовлетворяющие условиям синхронности, называются синхронными или синхронизированными; качество (свойство), которым они обладают, называется синхронизмом. Несинхронные процессы называются асинхронными."
← →
atruhin © (2005-09-10 20:57) [59]>>Alexander Panov © (02.09.05 11:45) [9]
>>Использовать функции синхронизации надо не только при записи, >>но и при чтении тех данных, обращение к которым происходит из >>нескольких потоков.
А я вот не соглашусь. Далеко не всегда нужно это делать. Возьмем к примеру переменную типа integer, которой присваеваем значения и читаем, обе операции атомарные на уровне процессора. Зачем их синхронизировать?
>>Без четкого понимания того, что происходит при работе с данными >>из нескольких потоков, это не имеет смысла.
Вот с этим согласен польностью
← →
Defunct © (2005-09-11 04:54) [60]> А я вот не соглашусь. Далеко не всегда нужно это делать. Возьмем к примеру переменную типа integer, которой присваеваем значения и читаем, обе операции атомарные на уровне процессора. Зачем их синхронизировать?
Возьмем другой пример.
Изменяется строка String. Начали читать, часть прочитали и тут опа какой-то умный поток пишет. И в итоге когда дочитаем получем галиматью.
Третий пример.
переменная типа integer. Допустим делаем тривиальный счетчик обращений к переменной спомощью inc(X). Поток 1 прочитал X, поток 2 прочитал X, оба потока увеличили X на 1 и пишут обратно, в результате получим при записи увеличение на 1, а не на 2 как должно было быть.
>> Без четкого понимания того, что происходит при работе с данными >>из нескольких потоков, это не имеет смысла.
> Вот с этим согласен польностью
можно и без понимания. За меня уже все продумали и предоставили механизм синхронизации. Моя задача просто использовать его. И часто даже без понимания все будет работать. (с пониманием конечно лучше). Но ведь не обязательно знать теорию электродинамики для того чтобы щелкнуть выключателем и зажегся свет.
Игорь Шевченко © (02.09.05 15:54) [19]
Знаешь, вообще-то идея переименовывать ".exe" в ".govno" к добру обычно не приводит. И коль найдется такой пользователь который начнет эксперементировать с расширениями и потом пытаться запустить то, что он намутил, так флаг ему в руки, и пусть у него все глючит. Это уже сугубо его проблема.
← →
Defunct © (2005-09-11 05:12) [61]begin...end © (02.09.05 15:45) [17]
> Любое
нет не любое. А только ".exe"
> ИШ, begin...end
Жаль нет такого смайлика, который выражает полное недоумение, несогласие с вашими постами, прозревание от прочитаного и легкое презрение, которое вызвано эмоциями от прочитанного. (С) а то бы я обязательно его поставил..
Вы рассуждаете о вседозволенности для пользователей, даже в таком вопросе как расширения исполнимых (системных) файлов. грустно.
← →
Джо © (2005-09-11 05:18) [62]Добавлю к [60] Defunct ©
Гм, гм... Ну, изменит пользователь расширение у исполнимого файла. Это даже проблем никаких не вызовет. По той простой причине, что "проблемный код", о котором речь, даже не выполнится. Ибо, умная система виндовс не научена выполнять файлы с расширением ".ovno".
← →
Fay © (2005-09-11 05:41) [63]2 Игорь Шевченко © (09.09.05 11:03) [58]
Наукообразность определения не помогает понять суть.
Так, по-моему, лучшее определение понятия "лошадь" - это "Что такое лошадь, знают все". 8)
А вот причины, по которым фраза "не защита данных и уж тем более, не защита кода" включает "и уж тем более" мне понятны, т.к. из фразы следует, что синхронизация имеео отношение к защите данных (IMHO, эта связь совершенно не маскируется).
← →
Defunct © (2005-09-11 06:16) [64]Навеяно Fay ©
позволю себе пофантазировать.
1. Синхронизация - это процесс, при котором некоторый(ые) кодовый поток ожидает возникновения события в другом(их) кодовом(ых) потоке(ах).
2. Синхронизация - это режим доступа к ресурсу, при котором кодовый поток запрашивает статус ресурса. Если ресурс свободен - захватывает ресурс, иначе - приостанавливается и ожидает пока ресурс освободится. После окончания работы с ресурсом кодовый поток освобождает занятый ресурс.
3. Синхронизация - это метод последовательного(поочередного) доступа разных кодовых потоков к одному ресурсу.
В 2,3 imho отражен принцип работы крит. секций. И защищается не код, а данные от преждевременного захвата. 1 - можно интерпретировать как SendMessage где дейстительно происходит защита кода от преждевременного исполнения.
← →
atruhin © (2005-09-11 07:42) [65]>>Defunct © (11.09.05 04:54) [60]
>> Допустим делаем тривиальный счетчик обращений к переменной >>спомощью inc(X)
Я делаю с помощью InterlockedExchangeAdd, и все ОК. :)
>>можно и без понимания. За меня уже все продумали и предоставили >>механизм синхронизации.
Вот так без понимания пишут, а потом на форум: помогите я тут, что то передрал но сам не знаю что (это не о ВАС а вообще).
Ведь не зря Windows существует немало способов синхронизации: критические секции, объекты ядра, атомарные операции. Отличаются возможностями, скоростью работы ...
Так что мое мнение, если начинаешь работать с потоками, лучше вначале досконально разобраться, а потом delphi запускать.
← →
Defunct © (2005-09-11 08:08) [66]> Так что мое мнение, если начинаешь работать с потоками, лучше вначале досконально разобраться, а потом delphi запускать.
Так можно вообще никогда Delphi не запустить.
Мое мнение несколько отличается от вашего:
Самый ценный опыт - опыт полученный в результате устранения собственных ошибок.
Чтением книг полезного опыта не добудешь (кроме опыта чтения книг).
Нет ничего страшного в том, что вначале можно допускать ошибки.
Понимание приходит только с практикой.
← →
begin...end © (2005-09-11 10:40) [67]> Alexander Panov © (02.09.05 16:13) [36]
А зачем заменять? Подойдёт любая функция, т.к. результат любой функции соответствует самому себе. Следовательно, любая функция удовлетворяет требованию в [18].
> Defunct © (11.09.05 05:12) [61]
> нет не любое.
Любое.
> Джо © (11.09.05 05:18) [62]
> "проблемный код", о котором речь, даже не выполнится
Выполнится.
> Ибо, умная система виндовс не научена выполнять файлы с
> расширением ".ovno".
Научена.
← →
Джо © (2005-09-11 15:53) [68]
> [67] begin...end © (11.09.05 10:40)
Пожалуйста, приведите последовательность действий, при помощи которой пользователь будет запускать на выполнение в файловом менеджере или там Explorer"е файлы с расширением ".ovno".
← →
begin...end © (2005-09-11 15:57) [69]> Джо © (11.09.05 15:53) [68]
Пользователь, вообще-то, может командной строкой воспользоваться. Или командой runas.
← →
Джо © (2005-09-11 16:10) [70]
> [69] begin...end © (11.09.05 15:57)
Честно говоря, не знал о таком финте. Действительно, запускается. В таком случае, действительно, проблемная ситуация может и случиться. Впрочем, все ямы которые может вырыть себе пользователь своими неумными действиями предусмотреть все-равно невозможно.
← →
Defunct © (2005-09-11 17:54) [71]begin...end © (11.09.05 10:40) [67]
>>> Любое
>> нет не любое.
> Любое.
повторять одно и то же это нынче модно так?
нет не любое. только ".exe". На любые другие расширения - плевать (они не являются гарантировано запускаемыми).
← →
begin...end © (2005-09-11 18:05) [72]> Defunct © (11.09.05 17:54) [71]
Вы хоть читайте посты, на которые отвечаете.
В [16] был вопрос от Alexander Panov: "А какое может быть еще расширение у написанного мной исполняемого файла?". Я в [17] ответил: "Любое". Вы что, сомневаетесь в том, что Alexander Panov способен изменить расширение у файла или сразу указать расширение, отличное от "exe", в настройках проекта? Если сомневаетесь, то интересно, почему. А если не сомневаетесь, то только подтверждаете мои слова, и тогда [61] и [71] не в кассу.
← →
begin...end © (2005-09-11 18:11) [73]> Defunct © (11.09.05 17:54) [71]
> На любые другие расширения - плевать (они не являются гарантировано
> запускаемыми).
Что есть "гарантированно запускаемое расширение"?
← →
Defunct © (2005-09-11 18:22) [74]begin...end © (11.09.05 18:11) [73]
> Что есть "гарантированно запускаемое расширение"?
Такое о котором в книжках по ОС, в данном случае по Windows, написано - executable file. Переименуй вы его в .JPEG или скажем в .wav результат от попыток запустить такой файл будет весьма плачевным.
← →
begin...end © (2005-09-11 18:28) [75]> Defunct © (11.09.05 18:22) [74]
> Переименуй вы его в .JPEG или скажем в .wav результат от
> попыток запустить такой файл будет весьма плачевным.
Это смотря чем запускать. Тут можно посоветовать про API-функцию CreateProcess почитать.
Если сопоставить расширению EXE какое-либо приложение (причём с помощью стандартных средств Windows), то результат попыток запустить в "Проводнике" файл с этим "гарантированно запускаемым расширением" тоже может быть весьма плачевным. Так что никакое оно не "гарантированно запускаемое".
← →
Defunct © (2005-09-11 18:38) [76]> Это смотря чем запускать. Тут можно посоветовать про API-функцию CreateProcess почитать.
программы обычно пишутся для рядового пользователя. Он не будет использовать CreateProcess, он будет использовать проводник или WinCmd (или другой файл-менеджер).
> Если сопоставить расширению EXE какое-либо приложение
После такого неопытные пользователи обычно переустанавливают виндовс.
PS: вы хотите сказать, что вообще никакой дисциплины не должно быть?
← →
begin...end © (2005-09-11 18:50) [77]> Defunct © (11.09.05 18:38) [76]
> Он не будет использовать CreateProcess, он будет использовать
> проводник или WinCmd (или другой файл-менеджер).
Напрямую использовать CreateProcess -- не будет, а косвенно -- может. См. пример в [69]. Я не считаю умение человека пользоваться командной строкой сверхъестественным.
> После такого неопытные пользователи обычно переустанавливают
> виндовс.
И что? Главное, что EXE-расширение не является "гарантированно запускаемым", вопреки сказанному Вами.
Вы про CreateProcess почитали? Там написано, что он исполняет в созданном процессе указанный модуль (executable file). Из того, что он запускает не только файлы с расширением "exe", можно заключить, что у исполняемого файла не обязательно должно быть это расширение. И что принадлежность файла к исполняемым вообще определяется здесь не по его расширению.
С таким же успехом можно было бы сказать, что файл с расширением doc -- это гарантированно word-овский документ.
> PS: вы хотите сказать, что вообще никакой дисциплины не
> должно быть?
Нет, я не хочу сказать, что вообще никакой дисциплины не должно быть.
← →
Defunct © (2005-09-11 20:52) [78]> Вы про CreateProcess почитали?
Да конечно, еще могу добавить, что команда start тоже может запустить исполнимый модуль с любым расширением. Однако, я категорически против такого "издевательства" на ОС.
> Нет, я не хочу сказать, что вообще никакой дисциплины не должно быть.
Вот и славно. Этими словами можно сказать вы разделяете мой взгляд на то, что Алексканд Панов придерживается дисциплины, а пользователь, который вдруг изменит расширение его ".exe" файла - дисциплины не придерживается. Следовательно со своей стороны Александр Панов не в ответе за возможные глюки по вине пользователя.
← →
Defunct © (2005-09-11 20:54) [79]извините, за опечатку в имени... никоим образом не хотел никого обидеть.
← →
begin...end © (2005-09-11 21:14) [80]> Defunct © (11.09.05 20:52) [78]
> Однако, я категорически против такого "издевательства" на
> ОС.
Однако непонятно, почему. И пока что никто не объяснил, почему это можно считать издевательством над ОС.
> Этими словами можно сказать вы разделяете мой взгляд на
> то, что Алексканд Панов придерживается дисциплины, а пользователь,
> который вдруг изменит расширение его ".exe" файла - дисциплины
> не придерживается.
Это не следует из сказанного мной в [77]. Я не знаю, о какой дисциплине идёт речь. А мои взгляды не изменились -- я считаю, что Александр Панов, используя функцию GetIniName из [10], поступает неправильно. И в изменении пользователем расширения исполняемого файла я не вижу ничего ненормального.
Страницы: 1 2 3 вся ветка
Форум: "Начинающим";
Текущий архив: 2005.10.16;
Скачать: [xml.tar.bz2];
Память: 0.65 MB
Время: 0.042 c