Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2012.04.08;
Скачать: CL | DM;

Вниз

Для чего нужен 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;
Скачать: CL | DM;

Наверх




Память: 0.58 MB
Время: 0.011 c
2-1324367435
gvozdkoff
2011-12-20 11:50
2012.04.08
узнать запущен ли веб сервер


3-1274100955
Tima
2010-05-17 16:55
2012.04.08
Вопрос по FIBScripter и fbclient.dll


15-1323421521
Ziggor
2011-12-09 13:05
2012.04.08
C чего начать?


15-1323203403
Юрий
2011-12-07 00:30
2012.04.08
С днем рождения ! 7 декабря 2011 среда


15-1322944202
Юрий
2011-12-04 00:30
2012.04.08
С днем рождения ! 4 декабря 2011 воскресенье