Конференция "Прочее" » Хочу сказать спасибо :)
 
  • Riply © (14.12.08 00:25) [0]
    [17] Игорь Шевченко ©   (14.12.08 00:06)
    > Счетчик ссылок строки изменяется командой, использующей монопольный доступ к ячейке памяти.
    > Еще раз советую изучить system.pas, в части функций, начинающихся на _LStr

    Век живи - век учись :)
    Спасибо.

    Спасибо и заронившим сомнения :)
  • antonn © (14.12.08 00:53) [1]
    а фото будет? :)
  • DVM © (14.12.08 00:56) [2]

    > Riply ©   (14.12.08 00:25)  

    На практике знание этого факта мало что меняет
  • Пробегал2.... (14.12.08 01:06) [3]
    Удалено модератором
    Примечание: Обсуждение модерирования
  • Пробегал2.... (14.12.08 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.... (14.12.08 01:10) [5]
    к сожалению, видимо, ИШ написал еще один пост, но его я уже не застал. Если кто повторит - спасибо.
  • jack128_ (14.12.08 01:16) [6]

    > Если кто повторит - спасибо.

    Э-э. Рипли в заглавном посте вроде как повторила. Не??
  • palva © (14.12.08 10:01) [7]

    > Э-э. Рипли в заглавном посте вроде как повторила. Не??

    Это к кому вопрос? Для того чтобы ответить на него, надо прочитать первоначальный пост, а Пробегал2 его не прочитал. Уж наверно ИШ написал там что-то еще, из-за чего ветку и грохнули.

    Я тоже его пост не прочитал.

    К Пробегал2. Не стоит провоцировать других на цитирование удаленных веток. Повторивший может сильно пострадать.
 
Конференция "Прочее" » Хочу сказать спасибо :)
Есть новые Нет новых   [134446   +38][b:0][p:0.001]