Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2012.04.08;
Скачать: [xml.tar.bz2];

Вниз

Для чего нужен Synchronzie   Найти похожие ветки 

 
Ega23 ©   (2011-12-09 11:27) [0]

В продолжение ветки http://delphimaster.net/view/2-1323383529/

И. Павел ©   (09.12.11 11:18) [14]

> [13] Ega23 ©   (09.12.11 10:57)

1 — ый поток: делает SetLength(mas, 1)
2 — ой поток: делает StrLength(mas, 0);
1 — ый поток: пытается записать значение в mas[0]

Неужели до сих пор не доходит?


Товарищ. Зачем тут нужен Synchronzie???


 
Сергей М. ©   (2011-12-09 11:58) [1]

Ну он имел ввиду что синхронизация таки нужна.

Возможно кроме Synchronize() как встроенного метода TThread иные способы синхронизации ему неизвестны либо претят по каким-то религиозным соображениям)


 
Ega23 ©   (2011-12-09 12:00) [2]


> Ну он имел ввиду что синхронизация таки нужна.

Синхронизация - безусловно нужна. А вот Synchronize() - сильно сомневаюсь.


 
Андреевич   (2011-12-09 12:13) [3]

насчет "нужен" это конечно перебор, но если массив в главном потоке и его меняет и главный и дополнительный - Synchronize() просто удобен


 
Ega23 ©   (2011-12-09 12:15) [4]


> но если массив в главном потоке


Массив в куче.


 
Германн ©   (2011-12-09 12:24) [5]

Имхо, потому что у автора это "работает".
А далее Сергей М. ©   (09.12.11 11:58) [1]


 
И. Павел ©   (2011-12-09 12:24) [6]

> [0] Ega23 ©   (09.12.11 11:27)

Никак не успокоитесь? :)
Вот бы мне столько же свободного времени.


> [1] Сергей М. ©   (09.12.11 11:58)

Известны. Но зачастую их реализация превращает код сложной логики в винигрет (это один частный случай).
Но эти методы имеет смысл использовать, если перенос расчетов в главный поток не желателен. Это другой частный случай.


 
Ega23 ©   (2011-12-09 12:30) [7]


> Но зачастую их реализация превращает код сложной логики
> в винигрет (это один частный случай).


Ужас.


 
Сергей М. ©   (2011-12-09 12:42) [8]


> И. Павел ©   (09.12.11 12:24) [6]


> Известны


Ну тады ой)
А то я уж разволновался)


 
Palladin ©   (2011-12-09 17:08) [9]

Вот такие люди советов надают, а потом смотришь примеры исходников кандидата, а там сплошные синхронизы, и по поводу и без повода...

Вот у меня, почему-то, ни критические секции, ни семафоры никакого винигрета в коде не создают, что же я не так делаю...


 
Сергей М. ©   (2011-12-09 17:16) [10]


>  у меня, почему-то, ни критические секции, ни семафоры никакого
> винигрета в коде не создают


Пресно ж как-то)..
Может файберы в блюдо добавить ?)
http://code.google.com/p/delphisorcery/source/browse/trunk/Source/Core/DSharp.Core.Fibers.pas?spec=svn211&r=211

Соляночка что надо получится)


 
И. Павел ©   (2011-12-09 23:33) [11]


> Вот такие люди советов надают, а потом смотришь примеры
> исходников кандидата

Если вы так беспокоитесь об осведомленности программистов о всех возможных методах синхронизации, то для меня остается загадкой ваш пост [11] в исходной ветке.


 
И. Павел ©   (2011-12-09 23:46) [12]

Кстати, вспомнил одно из достоинств synchronize: возможность общей обработки исключений всех потоков, например, в центральном обработчике OnException. Мелочь, но на практике бывает очень полезной, если нужно создать устойчивое приложение без дополнительных ухищрений, усложняющих логику.


 
Ega23 ©   (2011-12-09 23:55) [13]


> Если вы так беспокоитесь об осведомленности программистов
> о всех возможных методах синхронизации, то для меня остается
> загадкой ваш пост [11] в исходной ветке.


Пост [6].  Для того, чтобы писать в обну структуру, нужно использовать synchronize.

Для того, чтобы безопасно писать в одну структуру, надо либо мьютекс, либо крит.секцию использовать (второе предпочтительнее). Использовать же synchronize для этих целей попхивает вырыванием гланд через опу.
Собственно, что Тимур, что я, крайне удивились посту [6]. Да и всем последующим.


 
Ega23 ©   (2011-12-09 23:56) [14]


>  Мелочь, но на практике бывает очень полезной, если нужно
> создать устойчивое приложение без дополнительных ухищрений,
>  усложняющих логику.


Переведи.


 
Dennis I. Komarov ©   (2011-12-10 00:07) [15]

потоки, подобно указателям...
их надо просто понимать (продставлять как оно там происходит), и ничего там сверхестественного нет...


 
И. Павел ©   (2011-12-10 00:13) [16]


> Ega23 ©   (09.12.11 23:55) [13]

[12] и к вам относится. Только пост не [11], а [8] и далее.

Спорить тут нет смысла, и я, пожалуй, не буду, т.к. в выходные найду занятие поинтереснее. Про методы синхронизации я знаю, ничего крамольного в synchronize не вижу (пока это не тормозит систему), а вот автор исходного вопроса скорее всего уже это не читает.


 
Ega23 ©   (2011-12-10 00:20) [17]


> Про методы синхронизации я знаю


Сомнительно.


>  ничего крамольного в synchronize не вижу


А никто не говорит, что это дело крамольное.
Помнится, был тут кадр, в TMemo логи писал. Т.е. создавал TMemo в рантайме, передавал его в длительную процедуру обработки, писал в него, в конце - Memo.Lines.SaveToFile и убивал. Про StringList как-то не догадывался.
Твоё использование Sunchronize для безопасного доступа к данным - из той же серии.


 
Игорь Шевченко ©   (2011-12-10 00:37) [18]

И. Павел ©   (09.12.11 23:46) [12]


> Кстати, вспомнил одно из достоинств synchronize: возможность
> общей обработки исключений всех потоков, например, в центральном
> обработчике OnException.


Дай дураку член стеклянный - и член разобьет и руки порежет


 
Германн ©   (2011-12-10 00:38) [19]


> И. Павел ©   (09.12.11 23:46) [12]
>
> Кстати, вспомнил одно из достоинств synchronize: возможность
> общей обработки исключений всех потоков, например, в центральном
> обработчике OnException. Мелочь, но на практике бывает очень
> полезной, если нужно создать устойчивое приложение без дополнительных
> ухищрений, усложняющих логику.

Хм. Исключения в доппотоках это вообще-то очень сложная проблема. Таки вы предлагаете всё в доппотоках выполнять внутри процедуры Synchronize именно из-за проблем с исключениями?


 
antonn ©   (2011-12-10 00:53) [20]


> Таки вы предлагаете всё в доппотоках выполнять внутри процедуры
> Synchronize именно из-за проблем с исключениями?

наверное мессаги исключения выдавать в методе через синхронайз :)


 
Ega23 ©   (2011-12-10 08:50) [21]


> наверное мессаги исключения выдавать в методе через синхронайз
> :)


Синхронайз не поддерживает методы с параметрами. Чтобы передать туда строку надо ещё изгольнутся, и я не уверен, что код от этого прозрачнее будет.


 
Юрий_   (2011-12-10 11:53) [22]

Единственный довод за синхронайз - если нужна кроссплатформенность, и мы не можем использовать объекты операционки.


 
Вариант   (2011-12-10 12:32) [23]


> Юрий_   (10.12.11 11:53) [22]

Приведу еще пару или тройку доводов за :

1) Метод Synchronize уже написан грамотными разработчиками, его не надо писать заново, он прост в использовании.
2) Если знать как он работает, когда и для каких случаев им пользоваться,то он действительно работает.
3) Метод Synchronize не обидится, если вы вместо него используете другие методы синхронизации


 
Kerk ©   (2011-12-10 12:47) [24]


> Игорь Шевченко ©   (10.12.11 00:37) [18]
> Дай дураку член стеклянный - и член разобьет и руки порежет

Удалят, наверно, но напишу :)
Мне нравится ещё одна вариация данной поговорки: "Дураки е_утся насмерть" :)


 
sniknik ©   (2011-12-10 13:08) [25]

> Приведу еще пару или тройку доводов за :
1) "бегин енд" написан "грамотными разработчиками", его не надо писать заново, он супер прост в использовании. + еще не зафиксировано ни одного глюка данной конструкции.
2) если знать как работает что угодно, и для каких случаем им пользоваться, то что угодно действительно работает. + не в пример универсальнее синхронайза.
3) что угодно не обидится, если вместо него использовать другое что угодно. ибо не одушевлено. бойтесь искусственного интеллекта... грядет. и вот тогда вы ответите за свой код.

p.s. аргументы "ни о чем".


 
DVM ©   (2011-12-10 13:09) [26]


> Юрий_   (10.12.11 11:53) [22]
>
> Единственный довод за синхронайз - если нужна кроссплатформенность,
>  и мы не можем использовать объекты операционки.

Покажите мне операционку без критических секций или объектов синхронизации, которые бы позволили бы так или иначе заменить критическую секцию пусть и даже не столь эффективно? Даже в самой захудалой найдутся мьютексы и семафоры.


 
DVM ©   (2011-12-10 13:12) [27]


> Вариант   (10.12.11 12:32) [23]
>
>
> > Юрий_   (10.12.11 11:53) [22]
>
> Приведу еще пару или тройку доводов за :
>
> 1) Метод Synchronize уже написан грамотными разработчиками,
>  его не надо писать заново, он прост в использовании.

Полубогами вероятно. Т.е они не ошибаются? То-то оно переписывалось неоднократно. Еще помню TMultiReadExclusiveWriteSynchronizer (уфф..ну и название) с ошибками, приводящими к деадлокам (исправили уже).


 
Вариант   (2011-12-10 13:39) [28]


> sniknik ©   (10.12.11 13:08) [25]

> p.s. аргументы "ни о чем".


Кстати согласен, ибо мой пост это сарказм на пост [22],
ибо в этой ветке почти все посты ни о чем, начиная с самой ветки.


> DVM ©   (10.12.11 13:12) [27]


Я писал о полубогах? Я писал о грамотных разработчиках, или ты отказывешь в этом разработчика дельфи?
А ошибок да, было много всяких. Но исправляют же. Не ошибается тот кто не пишет.... или ты полубог? Уверен что нет.


 
Андреевич   (2011-12-10 13:54) [29]


> Ega23 ©   (10.12.11 08:50) [21]
>
> > наверное мессаги исключения выдавать в методе через синхронайз
>
> > :)
>
>
> Синхронайз не поддерживает методы с параметрами. Чтобы передать
> туда строку надо ещё изгольнутся, и я не уверен, что код
> от этого прозрачнее будет.

не поддерживает, можно изгольнуться и завести переменную под это дело


 
oxffff ©   (2011-12-10 15:02) [30]

Со строками все просто

procedure DoStuff(stuff:string);
begin
TThread.Synchronize(nil,
     procedure
     begin
     showmessage(stuff);
     end);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
DoStuff("На сретенском все спокойно");
end;


 
Юрий_   (2011-12-10 15:48) [31]


> DVM ©   (10.12.11 13:09) [26]
>



> Даже в самой захудалой найдутся мьютексы и семафоры.


Найтись то они, безусловно, найдутся, но программный интерфейс врядли везде одинаков.

>DVM ©   (10.12.11 13:12) [27]
+1


> Вариант   (10.12.11 13:39) [28]


> Кстати согласен, ибо мой пост это сарказм на пост [22],


Не вижу поводов для сарказма. Поясните.


 
И. Павел ©   (2011-12-10 18:06) [32]


> Kerk ©   (10.12.11 12:47) [24]

А если не насмерть, то по крайней мере без перерывов, даже ночью и в выходные... Для интереса буду время от времени следить за этим процессом, т.к. похоже, это надолго.


 
Вариант   (2011-12-10 18:06) [33]


> Юрий_   (10.12.11 15:48) [31]

Не аргументированное заявление. Например имею  GUI приложение, есть необходимость обращаться из дополнительного потока к VCL. Является ли это аргументом к использованию вышеупомянутого метода, если я использую таки класс TThread, или как тут пишут "религия не позволяет" и надо обязательно демонстрировать знание Windows API?


 
Ega23 ©   (2011-12-10 18:25) [34]


>  Для интереса буду время от времени следить за этим процессом,
>  т.к. похоже, это надолго.


Ты бы лучше следил за тем, что в "Начинающим" пишешь. Не первый раз уже, кстати.


 
Kerk ©   (2011-12-10 18:42) [35]

Вообще, не вижу ни одной причины почему какая-нибудь критическая секция или мьютекс сложнее синхронайза. Поведай.


 
Kerk ©   (2011-12-10 18:46) [36]


> Вариант   (10.12.11 18:06) [33]

Synchronize придумали с конкретной целью. Как раз для того, о чем ты пишешь. А вот использовать его, когда тебе нужно между собой синхронизировать два дополнительных потока, это уже странно.


 
Ega23 ©   (2011-12-10 18:54) [37]


> Synchronize придумали с конкретной целью. Как раз для того,
>  о чем ты пишешь.


Ну да. Причём именно для "простоты", т.к. никто не мешает SendMessage сделать, что равносильно предыдущей реализации синхронайза.


 
Вариант   (2011-12-10 18:54) [38]


> Kerk ©   (10.12.11 18:42) [35]

Писать меньше, уже написано все, а я стал ленивым.


> Kerk ©   (10.12.11 18:46) [36]

То есть причина использовать метод есть.

>  А вот использовать его, когда тебе нужно между собой синхронизировать
> два дополнительных потока, это уже странно.

А вот для этого случая я специально написал пункт 2 в [23]. Знать когда неиспользоапть тоже надо.


 
Вариант   (2011-12-10 19:00) [39]


> Ega23 ©   (10.12.11 18:54) [37]

Мне нравится оправданная простота:-)
Кстати я считаю правильным, что предыдущую реализацию переписали. Ибо простота реализации в данном случае ... дала сбой, скажем так


 
И. Павел ©   (2011-12-10 19:17) [40]


> Ega23 ©   (10.12.11 18:25) [34]

Критикуя других, за собой вы, конечно, не следите (надеюсь, это только на форуме, а в профессиональной деятельности все с точностью наоборот).

В исходной ветке вы дали массу "полезных" ответов. После того, как ее закрыли (кто стал инициатором ее закрытия?) - вы перенесли спам сюда. Возможно, вам стоит добавить к нику приставку "T"?



Страницы: 1 2 вся ветка

Форум: "Прочее";
Текущий архив: 2012.04.08;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.56 MB
Время: 0.004 c
15-1323117002
Юрий
2011-12-06 00:30
2012.04.08
С днем рождения ! 6 декабря 2011 вторник


15-1323030602
Юрий
2011-12-05 00:30
2012.04.08
С днем рождения ! 5 декабря 2011 понедельник


2-1324044551
Chuck Bass
2011-12-16 18:09
2012.04.08
проверить пуста ли строка


15-1323415640
Ega23
2011-12-09 11:27
2012.04.08
Для чего нужен Synchronzie


15-1323268620
tee_off
2011-12-07 18:37
2012.04.08
создание объекта внутри своего отдельного юнита





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