A>Чтобы функции-члены класса std::string имели атрибут volatile.
Боюсь, что функции-члены не могут иметь атрибут volatile просто синтаксически.
Использование volatile ограничивает возможности компилятора по оптимизации, т.к. volatile-объекты могут быть изменены в произвольный момент времени другим потоком (или обработчиком аппаратного прерывания ) Применение volatile к объектам, не являющимися простыми типами (т.е. не int, например) вероятно может повлиять только на оптимизацию inline-методов, т.к. все члены такого объекта также volatile.
Уж не знаю, что имел в виду мудрый препод, но для работы с volatile std::string нужна критическая секция в том или ином виде, иначе при параллельном обращении к string ее внутреннее состояние с большой вероятностью будет разрушено
Re[3]: Вопрос: volatile std::string s; - что бы это значило?
От:
Аноним
Дата:
24.11.05 17:19
Оценка:
Здравствуйте, Аноним, Вы писали:
A>>Чтобы функции-члены класса std::string имели атрибут volatile.
А>Боюсь, что функции-члены не могут иметь атрибут volatile просто синтаксически. А>Использование volatile ограничивает возможности компилятора по оптимизации, т.к. volatile-объекты могут быть изменены в произвольный момент времени другим потоком (или обработчиком аппаратного прерывания ) Применение volatile к объектам, не являющимися простыми типами (т.е. не int, например) вероятно может повлиять только на оптимизацию inline-методов, т.к. все члены такого объекта также volatile.
А>Уж не знаю, что имел в виду мудрый препод, но для работы с volatile std::string нужна критическая секция в том или ином виде, иначе при параллельном обращении к string ее внутреннее состояние с большой вероятностью будет разрушено
Ан нет, сорри,насчет volatile функций-членов achp прав.
Re[3]: Вопрос: volatile std::string s; - что бы это значило?
Здравствуйте, <Аноним>, Вы писали:
А>Уж не знаю, что имел в виду мудрый препод
Может быть, это: http://www.cuj.com/documents/s=7998/cujcexp1902alexandr/.
А>но для работы с volatile std::string нужна критическая секция в том или ином виде, иначе при параллельном обращении к string ее внутреннее состояние с большой вероятностью будет разрушено
volatile сам по себе не имплицирует параллельного обращения (повторю банальность, но volatile — часть языка, а многопоточность — нет).
... << RSDN@Home 1.2.0 alpha rev. 619>>
Re[3]: Вопрос: volatile std::string s; - что бы это значило?
Здравствуйте, Аноним, Вы писали:
A>>Чтобы функции-члены класса std::string имели атрибут volatile.
А>Боюсь, что функции-члены не могут иметь атрибут volatile просто синтаксически.
Почему это?
Например, так:
class string
{
...
char const volatile* c_str() volatile;
};
А>Уж не знаю, что имел в виду мудрый препод, но для работы с volatile std::string нужна критическая секция в том или ином виде, иначе при параллельном обращении к string ее внутреннее состояние с большой вероятностью будет разрушено
Это сложный вопрос как с точки зрения теории, так и с точки зрения практики. На самом деле в большинстве реализаций конкурентное чтение содержимого одного и того же объекта типа std::string, не сопровождающееся одновременной записью в него, не приведёт к ситуации гонки и не даст неверных результатов (то есть, с практической точки зрения допустимо). Однако "теоретической" гарантии нет.
Re[4]: Вопрос: volatile std::string s; - что бы это значило?
От:
Аноним
Дата:
24.11.05 17:31
Оценка:
Здравствуйте, Глеб Алексеев, Вы писали:
ГА>Здравствуйте, <Аноним>, Вы писали:
А>>Уж не знаю, что имел в виду мудрый препод ГА>Может быть, это: http://www.cuj.com/documents/s=7998/cujcexp1902alexandr/.
А>>но для работы с volatile std::string нужна критическая секция в том или ином виде, иначе при параллельном обращении к string ее внутреннее состояние с большой вероятностью будет разрушено ГА>volatile сам по себе не имплицирует параллельного обращения (повторю банальность, но volatile — часть языка, а многопоточность — нет).
А никто и не говорил, что "имплицирует". На самом деле прав achp насчет volatile функций-членов. По-моему, в std::string таковых нет?
Re[4]: Вопрос: volatile std::string s; - что бы это значило?
От:
Аноним
Дата:
24.11.05 17:35
Оценка:
A>Это сложный вопрос как с точки зрения теории, так и с точки зрения практики. На самом деле в большинстве реализаций конкурентное чтение содержимого одного и того же объекта типа std::string, не сопровождающееся одновременной записью в него, не приведёт к ситуации гонки и не даст неверных результатов (то есть, с практической точки зрения допустимо). Однако "теоретической" гарантии нет.
Да, про volatile был неправ, как уже признал выше.
Но чтобы правильно ответить на первоначальные вопросы нужно быть знакомым с "мудрым преподом" и ходить на его лекции, потому что то, что тут написано — это нечто. У std::string нет volatile-членов, так что использовать практически невозможно, разве что явно вызвать деструктор.
Re[5]: Вопрос: volatile std::string s; - что бы это значило?
Здравствуйте, <Аноним>, Вы писали:
А>>>Уж не знаю, что имел в виду мудрый препод ГА>>Может быть, это: http://www.cuj.com/documents/s=7998/cujcexp1902alexandr/.
А>На самом деле прав achp насчет volatile функций-членов. По-моему, в std::string таковых нет?
volatile снимается const_cast'ом. Александреску этим фактом в статье пользуется, прочесть не вредно. Говорит, что даже применял это дело в реальном проекте. Вообще применимость volatile в многопоточных программах очень горячо обсуждалась, и кто прав, я не знаю, но это вопрос отдельный; человек спросил, что это может означать, версия предложена.
... << RSDN@Home 1.2.0 alpha rev. 619>>
Re[6]: Вопрос: volatile std::string s; - что бы это значило?
Здравствуйте, achp, Вы писали:
A>Ах, ты, такой-сякой! Молодежь развращаешь?
А я и сам не очень старый .
Мне volatile в жизни ни разу не понадобилась.
... << RSDN@Home 1.2.0 alpha rev. 619>>
Re[8]: Вопрос: volatile std::string s; - что бы это значило?
От:
Аноним
Дата:
24.11.05 17:50
Оценка:
Здравствуйте, Глеб Алексеев, Вы писали:
ГА>Здравствуйте, achp, Вы писали:
A>>Ах, ты, такой-сякой! Молодежь развращаешь? ГА>А я и сам не очень старый .
ГА>Мне volatile в жизни ни разу не понадобилась.