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

Вниз

AnsiString и его изменение потокобезопасно?   Найти похожие ветки 

 
oxffff ©   (2009-03-11 16:35) [40]


> It"s not me   (11.03.09 16:07) [35]
>
> > Поясни, как можно сделать такой вывод?
>
>
> я пояснил вообще-то. Давай еще раз:
>
> Ты в посте [13] описал ситуацию, которая должна на мой взгляд
> привести к AV. (а что еще будет, если по твоим словам строчка
> может находиться уже в другом месте, чем думает один из
> потоков, в таком случае AV очень вероятен).


А почему ты думаешь, что она приведет к AV?
Обращение по недействительному указателю может вызвать AV, а может и не вызвать. AV является реакцией ОС на исключения процессора, которые происходят при определенных условиях.
Например обращение к отсутствующей странице, выход за сегмент описываемый дескриптором.

В твоих словах есть сомнение должно быть или не должно быть AV.
Так ты уж определись кто ты -
It"s not me   (11.03.09 16:07) [35] или It"s not me   (11.03.09 15:28) [31].
Как тебе такой поворот событий?


 
clickmaker ©   (2009-03-11 17:09) [41]

TMultiReadExclusiveWriteSynchronizer тут не поможет?


 
Игорь Шевченко ©   (2009-03-11 17:15) [42]

clickmaker ©   (11.03.09 17:09) [41]

TMultiWriteExclusiveReadSynchronizer - но его нету


 
KSergey ©   (2009-03-11 17:48) [43]

> clickmaker ©   (11.03.09 17:09) [41]
> TMultiReadExclusiveWriteSynchronizer

Научи?


 
It's not me   (2009-03-11 17:59) [44]


> Обращение по недействительному указателю может вызвать AV,
>  а может и не вызвать


главное тут для меня, что МОЖЕТ вызывать AV. То, что описал ТЫ в результате МОЖЕТ выдать AV. А Тимохов однозначно сказал, что AV не может быть, ибо там как-то хитро string устроен. Вот и все.

Да и чего ты меня пытаешь ) Если ты уверен, что так писать неправильно - так и скажи, я ошибочно значит подумал )


> TMultiReadExclusiveWriteSynchronizer тут не поможет?


интересный класс, спасибо, я не знал о таком! Да, поможет несомненно, как аналог использования TCriticalSection. Осталось подразобраться в чем его преимущество, разбираюсь... Навскидку по коду (и названию класса :) ) понял то, что он позволяет сразу многим читать, но запись при этом эксклюзивна.


 
clickmaker ©   (2009-03-11 18:05) [45]

> [43] KSergey ©   (11.03.09 17:48)
> > clickmaker ©   (11.03.09 17:09) [41]
> > TMultiReadExclusiveWriteSynchronizer
>
> Научи?
> [цитата]

щас It"s not me разберется - научит -)


 
It's not me   (2009-03-11 18:10) [46]

а че там разбираться )

Аналог TCriticalSection, но сделанный на мьютексе, а не критич. секции (что только лучше), только с разделениями на Read операции и Write.

Read операций сколько угодно, но только при отсутствии Write. Write эксклюзивна и делается при отутствии как read операций, так и других write, что логично.

Мне вообще кажется это скоро станет элементом языка. например, поля класса удобно было бы автоматически оборачивать в такие консструкции.

Грубо говоря все геттеры работают через read операции, все сеттеры через write.


 
Eraser ©   (2009-03-11 19:22) [47]

> но сделанный на мьютексе, а не критич. секции (что только
> лучше)

чем лучше? в курсе что такое критическая секция и зачем она вообще изобретена?


 
DVM ©   (2009-03-11 19:37) [48]


> Аналог TCriticalSection, но сделанный на мьютексе, а не
> критич. секции (что только лучше), только с разделениями
> на Read операции и Write.


> Мне вообще кажется это скоро станет элементом языка.

Только это в 1000 раз медленнее крит секции будет.


 
Городской Шаман   (2009-03-11 19:39) [49]


> It"s not me   (11.03.09 11:55) [10]
>
>
> > так даже с Integer-ом делать нельзя
>
> с integer"ом нельзя, я знаю. Но почему отсюда следует, что
> так нельзя делать с AnsiString - не понимаю.


В автобус входят два чукчи. Пеpвый спpашивает у водителя:
- Я доеду на этом автобусе до вокзала?
- Доедете. - спокойно отвечает водитель.
- А я? - спpашивает втоpой.
- И вы доедете. - так же спокойно отвечает водитель.
- А вот и не угадал! - pадуется втоpой. - Я pаньше сойду!


 
Anatoly Podgoretsky ©   (2009-03-11 19:54) [50]

> It"s not me  (10.03.2009 19:10:00)  [0]

> А плодить крит. секцию для работы с одной строчкой лениво.

Ленивым не место в программирование.


 
Sapersky   (2009-03-11 20:45) [51]

Только это в 1000 раз медленнее крит секции будет.

Насколько я смог разглядеть - логика похожа на крит. секцию, сначала пытается обойтись Interlocked-функциями, если уж совсем никак - используются Events и WaitFor-функции. Так что должно быть как минимум не хуже КС.
Мьютексов там вообще нет.


 
Сергей М. ©   (2009-03-11 20:59) [52]


> It"s not me   (11.03.09 18:10) [46]


> на мьютексе


> элементом языка


Ты не понимаешь, какую ахинею ты сейчас несешь.


 
oxffff ©   (2009-03-11 21:53) [53]


> Да и чего ты меня пытаешь ) Если ты уверен, что так писать
> неправильно - так и скажи, я ошибочно значит подумал )


Клиент должен сам дойти до кондиции.


 
It's not me   (2009-03-11 22:22) [54]

Eraser ©   (11.03.09 19:22) [47]
чем лучше?


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

Eraser ©   (11.03.09 19:22) [47]
в курсе что такое критическая секция и зачем она вообще изобретена?


такие бесценные знания такому бездарю как я не могут быть доступны по определению )

DVM ©   (11.03.09 19:37) [48]
Только это в 1000 раз медленнее крит секции будет.


не может быть

Sapersky   (11.03.09 20:45) [51]
Насколько я смог разглядеть - логика похожа на крит. секцию, сначала пытается обойтись Interlocked-функциями, если уж совсем никак - используются Events и WaitFor-функции. Так что должно быть как минимум не хуже КС


вот именно. А точнее, гораздо лучше дельфовой TCriticalSection, которая не использует полезные фичи секций, которые появились только в w2k+

Sapersky   (11.03.09 20:45) [51]
Мьютексов там вообще нет.


да, там event...

Сергей М. ©   (11.03.09 20:59) [52]
Ты не понимаешь, какую ахинею ты сейчас несешь.


ну так отлично! Если я не понимаю, значит это не ахинея для меня. А значит все в пределах разумного.


 
oxffff ©   (2009-03-11 22:40) [55]


> It"s not me   (11.03.09 22:22) [54]


Умение смеятся на собой ценное качество. Я бы сказал самое ценное.
Уважаю.


 
oxffff ©   (2009-03-11 22:41) [56]


> смеятся


смеяться


 
It's not me   (2009-03-12 01:03) [57]

oxffff ©   (11.03.09 22:40) [55]

а ты первый на моем веку человек, который по делу и с глубокими знаниями уделал ИШ"а по начальному вопросу, в котором ИШ был полностью уверен )))
Уважаю.
За знания (хотел бы я через пару лет разбираться в программинге как ты) и за умение спорить ради истины, а не ради моральной победы над оппонентом (как большинство).


 
It's not me   (2009-03-12 01:04) [58]

Ждем шутников на алкогольные темы ))


 
Тын-Дын ©   (2009-03-12 01:21) [59]


> It"s not me   (11.03.09 11:55) [10]
> > так даже с Integer-ом делать нельзяс integer"ом нельзя,
>  я знаю. Но почему отсюда следует, что так нельзя делать
> с AnsiString - не понимаю.


Если ответишь на вопрос, почему нельзя с integer, то и на вопрос по поводу AnsiString вообще не возникнет.


 
DVM ©   (2009-03-12 01:27) [60]


> It"s not me   (11.03.09 22:22) [54]


> не может быть

Может, сравни производительность крит секции и например, мьютекса или семафора


 
DVM ©   (2009-03-12 01:28) [61]


> Sapersky   (11.03.09 20:45) [51]


> Насколько я смог разглядеть - логика похожа на крит. секцию,
>  сначала пытается обойтись Interlocked-функциями, если уж
> совсем никак - используются Events и WaitFor-функции. Так
> что должно быть как минимум не хуже КС.
> Мьютексов там вообще нет.

А вона оно как. Тогда возможно и не медленнее так сильно.


 
Eraser ©   (2009-03-12 03:39) [62]

> [54] It"s not me   (11.03.09 22:22)


> тем, что у мьютекса (на самом деле там event я спьяну не
> разглядел да один фиг) нормальный и правильный на мой взгляд
> режим работы - FIFO.

ну да, а в MS лохи систему пишут.
а на вопрос так и не ответи, чем критическая секция лучше мьютекса?

> А точнее, гораздо лучше дельфовой TCriticalSection, которая
> не использует полезные фичи секций, которые появились только
> в w2k+

делфивская TCriticalSection это не более, чем обертка над API функциями.

> [57] It"s not me   (12.03.09 01:03)


> который по делу и с глубокими знаниями уделал ИШ"а

мда.. кто зачем сюда ходит, а It"s not me, чтобы уделать ИШа, ппц )


 
Eraser ©   (2009-03-12 03:40) [63]

> чем критическая секция лучше мьютекса?

или хуже, так яснее.


 
It's not me   (2009-03-12 12:38) [64]


> Если ответишь на вопрос, почему нельзя с integer, то и на
> вопрос по поводу AnsiString вообще не возникнет.


какой ты прямолинейный. Видимо, потому, что AnsiString это типа еще сложнее, чем integer.

А может ты тогда ответишь на вопрос, почему нельзя с integer (такой ведь простой тип), а с TThreadList можно (куда сложнее).


> Может, сравни производительность крит секции и например,
>  мьютекса или семафора

так тебе надо - ты и сравнивай. Ты что, правда думаешь, что крит. секция это нечто особенное? Это такой же объект ядра, более того при возникновении блокировки для КРИТИЧЕСКОЙ СЕКЦИИ создается так любимый тобой МЬЮТЕКС (по крайней мере до висты, в висте они че то перемудрили с секциями) и в таком случае критическая секция сработает даже МЕДЛЕННЕЕ, чем МЬЮТЕКС впрямую. Так что перестань нести всякое разное.

Что касается производительности, у меня миллион event"ов (еще раз - МИЛЛИОН) создается несколько десятков миллисекунд. Вопрос производительности при блокировке только в том, что для засыпания потоку нужно уйти в режим ядра, а это относительно дорого. И критические секции в win2k специально немного модернизировали, добавив циклы перепроверки вхождения. Но дельфовый TCriticalSection это абсолютно не использует


> а на вопрос так и не ответи, чем критическая секция лучше
> мьютекса?

я тебе ответил. А если ты еще раз загонишься и ЕЩЕ РАЗ будешь мне доказывать, что я тебе не ответил - я тебе и на это не отвечу, запарил ты уже )


> делфивская TCriticalSection это не более, чем обертка над
> API функциями.

не может быть!!! Я всегда думал, что в TCS реализовано альтернативное ядро виндоус... Блииннн, я ламо просто! Как известно LMD, я пошел


 
It's not me   (2009-03-12 12:41) [65]


> более того при возникновении блокировки для КРИТИЧЕСКОЙ
> СЕКЦИИ создается так любимый тобой МЬЮТЕКС

или семафор. Я точно уже не помню, но это и не принципиально.


 
clickmaker ©   (2009-03-12 13:05) [66]

> procedure TMy.AddOpenDev(NewDev: string);
> begin
> FOpenDev := FOpenDev + NewDev + "|" ;
> end;

боюсь показаться дебилом, но я так и понял, что мешает написать
procedure TMy.AddOpenDev(NewDev: string);
begin
FCritSect.Enter;
try
  FOpenDev := FOpenDev + NewDev + "|" ;
finally
 FCritSect.Leave;
end;
end;

при чтении - то же самое. FCritSect - это, разумеется, глобальный объект


 
It's not me   (2009-03-12 14:10) [67]

а что мешает делать так?

var
 tl: TThreadList;

.......

var
 List: TList;
begin
 FCritSect.Enter;
 try
   List := tl.LockList;
   try
     РАБОТАЕМ!
   finally
     tl.UnlockList;
   end;
   FOpenDev := FOpenDev + NewDev + "|" ;
 finally
   FCritSect.Leave;
 end;
end;

FCritSect - это, разумеется, глобальный объект


 
DVM ©   (2009-03-12 15:12) [68]


> It"s not me   (12.03.09 12:38) [64]


> так тебе надо - ты и сравнивай. Ты что, правда думаешь,
> что крит. секция это нечто особенное? Это такой же объект
> ядра, более того при возникновении блокировки для КРИТИЧЕСКОЙ
> СЕКЦИИ создается так любимый тобой МЬЮТЕКС (по крайней мере
> до висты, в висте они че то перемудрили с секциями) и в
> таком случае критическая секция сработает даже МЕДЛЕННЕЕ,
>  чем МЬЮТЕКС впрямую

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


 
DVM ©   (2009-03-12 15:20) [69]


> Ты что, правда думаешь, что крит. секция это нечто особенное?
>  Это такой же объект ядра

Критическая секция НЕ ОБЪЕКТ ЯДРА! Не придумывай. Она внутри себя содержит объект ядра и то вроде не всегда.


 
Тын-Дын ©   (2009-03-12 15:28) [70]


> It"s not me   (12.03.09 12:38) [64]
> > Если ответишь на вопрос, почему нельзя с integer, то и
> на > вопрос по поводу AnsiString вообще не возникнет.какой
> ты прямолинейный. Видимо, потому, что AnsiString это типа
> еще сложнее, чем integer.А может ты тогда ответишь на вопрос,
>  почему нельзя с integer (такой ведь простой тип), а с TThreadList
> можно (куда сложнее).


Я не собираюсь тебе разжёвывать тривиальные вещи. Возьми Рихтера и прочитай (там всего пару страниц достаточно) про работу с целыми числами из разных потоков.

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


> так тебе надо - ты и сравнивай. Ты что, правда думаешь,
> что крит. секция это нечто особенное? Это такой же объект
> ядра, более того при возникновении блокировки для КРИТИЧЕСКОЙ
> СЕКЦИИ создается так любимый тобой МЬЮТЕКС (по крайней мере
> до висты, в висте они че то перемудрили с секциями) и в
> таком случае критическая секция сработает даже МЕДЛЕННЕЕ,
>  чем МЬЮТЕКС впрямую. Так что перестань нести всякое разное.
>


Вот блин изобретатель хренов!
Критическая секция - самый быстрый объект для синхронизации.


 
Тын-Дын ©   (2009-03-12 15:29) [71]

PS.
Не считая спин-блокировку, конечно.


 
It's not me   (2009-03-12 15:35) [72]


> Процедура входа и выхода критических секций обычно занимает
> меньшее время

вот видишь. Ты и сам это понимаешь. Пишешь слово - обычно.

Обычно - это когда? Когда нет блокировки? Или когда есть? И что в твоей программе обычно, то в другой программе необычно.

Поэтому писать, что мьютекс в ТЫСЯЧИ РАЗ медленнее крит. секций - наглая ложь.


> Мьютекс, имеющий большую функциональность, чем критическая
> секция и более сложную реализацию, оказывается работает
> быстрее, чем более простая критическая секция

в некоторых случаях да. А как вообще может быть иначе, если в некоторых ситуациях вход в критическую секцию приводит к созданию мьютекста и синхронизации на нем? Как в данном случае может работать быстрее (будем говорить про тысячу раз?), чем прямое использование мьютекса?


 
Eraser ©   (2009-03-12 15:39) [73]

> [64] It"s not me   (12.03.09 12:38)


> так тебе надо - ты и сравнивай. Ты что, правда думаешь,
> что крит. секция это нечто особенное? Это такой же объект
> ядра, более того при возникновении блокировки для КРИТИЧЕСКОЙ
> СЕКЦИИ создается так любимый тобой МЬЮТЕКС (по крайней мере
> до висты, в висте они че то перемудрили с секциями) и в
> таком случае критическая секция сработает даже МЕДЛЕННЕЕ,
> чем МЬЮТЕКС впрямую. Так что перестань нести всякое разное.
>
> Что касается производительности, у меня миллион event"ов
> (еще раз - МИЛЛИОН) создается несколько десятков миллисекунд.
> Вопрос производительности при блокировке только в том, что
> для засыпания потоку нужно уйти в режим ядра, а это относительно
> дорого. И критические секции в win2k специально немного
> модернизировали, добавив циклы перепроверки вхождения. Но
> дельфовый TCriticalSection это абсолютно не использует

у тебя ошибочное представление о работе критических секций, читай дядю Рихтера и Руссиновича.
так кстати и не понял, чем тебе TCriticalSection не угодил и почему там что-то не используется? там вызов API-функции.


 
It's not me   (2009-03-12 15:41) [74]


> Я не собираюсь тебе разжёвывать тривиальные вещи

зато ты уверен, что я их не знаю ))))


> Возьми Рихтера и прочитай

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


> для безопасной многопоточной работы с данными операция должна
> быть атомарной с точки зрения

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


> Критическая секция - самый быстрый объект для синхронизации

а как же interloc...


> Не считая спин-блокировку, конечно

ах, как жаль не успел )))


 
DVM ©   (2009-03-12 15:43) [75]


> It"s not me   (12.03.09 15:35) [72]


> Поэтому писать, что мьютекс в ТЫСЯЧИ РАЗ медленнее крит.
>  секций - наглая ложь.

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


 
Сергей М. ©   (2009-03-12 15:56) [76]


> It"s not me   (12.03.09 15:41) [74]


> что же тогда работа с TThreadList при всей своей абсолютной
> неатомарности при этом полностью безопасна для многопоточной
> работы


Ты с головой вообще дружишь когда-нибудь ?

TThreadList использует ту же самую крит.секцию, которую тебе "лениво плодить".

Вот именно потому что операции со объектом-списком TList не являются атомарными, TThreadList и использует объект синхронизации.


 
It's not me   (2009-03-12 16:09) [77]


> у тебя ошибочное представление о работе критических секций,
>  читай дядю Рихтера

перечитал в электроном виде. Да, действительно, там не мьютекс или семафор создается, а event. Совсем что-то с памятью... Впрочем, не вижу принципиальной разницы.


> и Руссиновича

DVM, во, видишь! Грамотные наезжальщики оперируют фамилиями Руссинович. Рихтер не в моде ужо.


> А про TMultiReadExclusiveWriteSynchronizer, который мало
> того глючный до безобразия в некоторых версия Delphi

пример, в каком месте он глючный?

Ах да, ты уже наверное не помнишь и лезть в старые дельфи влом, короче бла бла бла


> но еще и тормозной

пример места, где он тормозной?


> так кстати и не понял, чем тебе TCriticalSection не угодил
> и почему там что-то не используется?

не используется новая функция появившееся в w2k+, не просто initializecriticalsection (или как там), а ...AndSpinCount


 
It's not me   (2009-03-12 16:16) [78]


> Ты с головой вообще дружишь когда-нибудь ?

не дружу.

А ты что, дружишь со своей головой? И как, успешно? Вы, наверное, друг к другу в гости ходите, чаи гоняете, здороваетесь при встрече?


> Вот именно потому что операции со объектом-списком TList
> не являются атомарными, TThreadList и использует объект
> синхронизации

а-а-а... Так вот ты куда пропал, Капитан Очевидность!!! )))))))))))))


 
Тын-Дын ©   (2009-03-12 16:16) [79]


> It"s not me   (12.03.09 15:41) [74]
> > Я не собираюсь тебе разжёвывать тривиальные вещизато ты
> уверен, что я их не знаю ))))


По твоим высказываниям как раз это и следует.


> мне кажется это скоро станем универсальным наездом на всех
> и вся )не катит уже с прошлого века, Рихтера уж кто только
> не читал. Сейчас моднее на руссиновича ссылаться.


Это не наезд, а именно совет ознакомиться с темой, которой ты не владеешь, из первоисточника (можно так сказать).

Ну если тебе моднее на Руссиновича, то почитай Руссиновича для на чала.


> ух ты. А что же тогда работа с TThreadList при всей своей
> абсолютной неатомарности при этом полностью безопасна для
> многопоточной работы? )))


Вах! Какой бред!
Лишний раз подтверждаешь ПОЛНОЕ незнание темы.

А раз не знаешь, то слушай, что тебе говорят, а не огрызайся не по делу.


> > Критическая секция - самый быстрый объект для синхронизацииа
> как же interloc...


Функии Interlocked... имеют сликом узкую область применения, чтобы говорить о них как объектах синхронизации (тем более, что они и не являются таковыми).


 
Eraser ©   (2009-03-12 16:16) [80]

> [77] It"s not me   (12.03.09 16:09)


> DVM, во, видишь! Грамотные наезжальщики оперируют фамилиями
> Руссинович. Рихтер не в моде ужо.

если ты это про меня, то первым был упомянут дядя Рихтер )

> не используется новая функция появившееся в w2k+, не просто
> initializecriticalsection (или как там), а ...AndSpinCount

странный довод. эта функциональность не нужна, где попало.

> пример места, где он тормозной?

набросай простенький тест и посмотри.



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

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

Наверх




Память: 0.65 MB
Время: 0.008 c
2-1232978119
anton shestakov
2009-01-26 16:55
2009.05.17
Фильтрация в базе


15-1237316945
Вот в чем вопрос
2009-03-17 22:09
2009.05.17
Перегрузка операторов


15-1236764505
desc
2009-03-11 12:41
2009.05.17
Функция возвращения пути


2-1238847972
Killwater
2009-04-04 16:26
2009.05.17
Файл ресурсов для waw звука


15-1237197118
Немо2
2009-03-16 12:51
2009.05.17
Что имеется ввиду?





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