Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
9-1115116527
Zwein
2005-05-03 14:35
2005.10.16
Воспроизведение звука


2-1126431625
Drow
2005-09-11 13:40
2005.10.16
задача на Pascal


1-1127820657
ZeroDivide
2005-09-27 15:30
2005.10.16
О самоуничтожении объекта.


2-1126707473
Anton22
2005-09-14 18:17
2005.10.16
StatusBar


2-1127066518
x-goody
2005-09-18 22:01
2005.10.16
Как связать объект с .exe файлом?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский