Вопрос: volatile std::string s; - что бы это значило?
От: Pr0F Беларусь  
Дата: 24.11.05 17:01
Оценка:
Эти вопросы наш лектор по объектно ориентированному программированию вынес на самостоятельное рассмотрение.

3 вопроса по volatile std::string s;
1.Что это значит?
2.Как это применять?
3.Что нужно для применения этого?
Re: Вопрос: volatile std::string s; - что бы это значило?
От: achp  
Дата: 24.11.05 17:06
Оценка: +1
Здравствуйте, Pr0F, Вы писали:

PF>3 вопроса по volatile std::string s;

PF> 1.Что это значит?

Кто-то выпендрился.

PF> 2.Как это применять?


Ну, можно взять адрес и вызвать деструктор.

PF> 3.Что нужно для применения этого?


Чтобы функции-члены класса std::string имели атрибут volatile.
Re[2]: Вопрос: volatile std::string s; - что бы это значило?
От: Аноним  
Дата: 24.11.05 17:14
Оценка: -1
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; - что бы это значило?
От: Глеб Алексеев  
Дата: 24.11.05 17:23
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Уж не знаю, что имел в виду мудрый препод

Может быть, это: 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; - что бы это значило?
От: achp  
Дата: 24.11.05 17:27
Оценка:
Здравствуйте, Аноним, Вы писали:

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; - что бы это значило?
От: achp  
Дата: 24.11.05 17:37
Оценка:
Здравствуйте, Аноним, Вы писали:

А>По-моему, в std::string таковых нет?


Нет.
Re[5]: Вопрос: volatile std::string s; - что бы это значило?
От: Глеб Алексеев  
Дата: 24.11.05 17:40
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>>>Уж не знаю, что имел в виду мудрый препод

ГА>>Может быть, это: 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  
Дата: 24.11.05 17:41
Оценка: :)
Здравствуйте, Глеб Алексеев, Вы писали:

ГА>volatile снимается const_cast'ом.


Ах, ты, такой-сякой! Молодежь развращаешь?
Re[7]: Вопрос: volatile std::string s; - что бы это значило?
От: Глеб Алексеев  
Дата: 24.11.05 17:43
Оценка:
Здравствуйте, 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 в жизни ни разу не понадобилась.


пару раз бывало, но только не для std::string
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.