Форум: "Прочее";
Текущий архив: 2009.02.08;
Скачать: [xml.tar.bz2];
ВнизХочу сказать спасибо :) Найти похожие ветки
← →
Riply © (2008-12-14 00:25) [0][17] Игорь Шевченко © (14.12.08 00:06)
> Счетчик ссылок строки изменяется командой, использующей монопольный доступ к ячейке памяти.
> Еще раз советую изучить system.pas, в части функций, начинающихся на _LStr
Век живи - век учись :)
Спасибо.
Спасибо и заронившим сомнения :)
← →
antonn © (2008-12-14 00:53) [1]а фото будет? :)
← →
DVM © (2008-12-14 00:56) [2]
> Riply © (14.12.08 00:25)
На практике знание этого факта мало что меняет
← →
Пробегал2.... (2008-12-14 01:06) [3]Удалено модератором
Примечание: Обсуждение модерирования
← →
Пробегал2.... (2008-12-14 01:09) [4]Если кому интересно - вот краткая выдержка из ветки, надеюсь я сейчас ничего не нарушаю:
Потокобезопасен ли тип string?Пробегал2.... (13.12.08 22:21)
Подумалось вот тут... Всем известен тип string, известна его структура и свойства при копировании. Но предусмотрено ли в типе string потокобезопасность или он является таковым по своей структуре? Или он не потокобезопасный?
Допустим, где-то в программе имеем:
s1 := s2;
Далее s1 передается в один поток, а s2 в другой поток. Понятно, что при таком копировании реально s1 и s2 будут ссылаться на одну строку. Далее элементарный вариант, в первом потоке делается:
s3 := s1
в другом
s4 := s2
что если эти операции будут совершены в одно и тоже время? По идее счетчик ссылок должен быть увеличен на 2. Но в том же Рихтере наглядно показано как i:=i+1 одновременно в разных потоках может привести к результатам, отличным от увеличения i на 2. Или счетчик ссылок в string увеличивается с помощью InterlockedIncreament?
Можно еще кучу ситуаций придумать, я думаю...
В общем, я к чему - потокобезопасен ли "хитрый" тип string или нет? Если нет - для меня это станет неожиданностью и поводом задуматься. Раньше об этом даже не думал, я знал "хитрость" string"а, но работал всегда так, как будто s1 := s2 - получаются разные строчки, в принципе так и должно быть по задумке, реализация скрытая. Но что насчет многопоточности?Городской Шаман (13.12.08 22:38)
> Пробегал2.... (13.12.08 22:21)
В VSC++ 6.0 не потокобезопасен, в 7.0 баг пофиксили. Зависит от реализации STL.
Ну или для Delphi зависит от реализации компилятора. Хотя в 7-рке безопасен.Пробегал2.... (13.12.08 22:46)
Городской Шаман (13.12.08 22:38)
То есть, точно начиная с D7 стриги потокобезопасны? Ясно, спасибо.
Единственное, может хотелось бы официального подтверждения сего факта.Городской Шаман (13.12.08 22:51)
> Пробегал2.... (13.12.08 22:46) [4]
>
> Городской Шаман (13.12.08 22:38) [3]
>
> То есть, точно начиная с D7 стриги потокобезопасны?
Может и более с ранними версиями они работают нормально. Но начиная с D7 они точно потокобезопасны.
Единственно что во время присваивания как string так и переменной любого другого типа лучше входить в критическую секцию, так как во время присваивания данные могут изменится, а после уже нет.Игорь Шевченко © (13.12.08 23:24)
> Но предусмотрено ли в типе string потокобезопасность
Предусмотрена. Достаточно изучить system.pas
← →
Пробегал2.... (2008-12-14 01:10) [5]к сожалению, видимо, ИШ написал еще один пост, но его я уже не застал. Если кто повторит - спасибо.
← →
jack128_ (2008-12-14 01:16) [6]
> Если кто повторит - спасибо.
Э-э. Рипли в заглавном посте вроде как повторила. Не??
← →
palva © (2008-12-14 10:01) [7]
> Э-э. Рипли в заглавном посте вроде как повторила. Не??
Это к кому вопрос? Для того чтобы ответить на него, надо прочитать первоначальный пост, а Пробегал2 его не прочитал. Уж наверно ИШ написал там что-то еще, из-за чего ветку и грохнули.
Я тоже его пост не прочитал.
К Пробегал2. Не стоит провоцировать других на цитирование удаленных веток. Повторивший может сильно пострадать.
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2009.02.08;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.005 c