Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> STL и многопоточность 
:(
    Опции темы
alexvs11
Дата 17.2.2011, 15:42 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


hell is here
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 21.8.2010

Репутация: 6
Всего: 10



Цитата(borisbn @  17.2.2011,  10:14 Найти цитируемый пост)
чевойта ?

это обозначает, что в многопоточной среде в условиях когда доступ к объектам stl'a идет раздельно ничего само не взорвется

Цитата

The SGI implementation of STL is thread-safe only in the sense that simultaneous accesses to distinct containers are safe, and simultaneous read accesses to to shared containers are safe. If multiple threads access a single container, and at least one thread may potentially write, then the user is responsible for ensuring mutual exclusion between the threads during the container accesses.

PM MAIL   Вверх
Abyx
Дата 17.2.2011, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 601
Регистрация: 3.11.2009

Репутация: 1
Всего: 10



alexvs11, и какое нам дело до "The SGI implementation of STL" ?
PM MAIL   Вверх
azesmcar
Дата 17.2.2011, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



alexvs11

1. В visual C++ (по умолчанию) стоит dinkumware, а не SGI.
2. 
Цитата(alexvs11 @  17.2.2011,  15:42 Найти цитируемый пост)
The SGI implementation of STL is thread-safe only in the sense that simultaneous accesses to distinct containers are safe

это означает, что доступ к разным контейнерам, разными потоками безопасен (еще бы, только этого нам не хватало smile )

Цитата(alexvs11 @  17.2.2011,  15:42 Найти цитируемый пост)
and simultaneous read accesses to to shared containers are safe.

чтение общих контейнеров потокобезопасно, это гарантия реализации от SGI, тем не менее стандарт такой гарантии не дает.

Цитата(alexvs11 @  17.2.2011,  15:42 Найти цитируемый пост)
If multiple threads access a single container, and at least one thread may potentially write, then the user is responsible for ensuring mutual exclusion between the threads during the container accesses.

Вот он! Контейнер потокобезопасен для чтение, но не для записи. Если мы вернемся к исходнику в первом посте, мы увидем, что ТС пытается удалить элемент из контейнера, что никак нельзя назвать чтением.
PM   Вверх
borisbn
Дата 17.2.2011, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Цитата(alexvs11 @  17.2.2011,  15:42 Найти цитируемый пост)
что в многопоточной среде в условиях когда доступ к объектам stl'a идет раздельно ничего само не взорвется

и к std::istream ?
если говорить только о SLT-контейнерах, то понятно, что вызsвать функции для чтения можно из разных потоков, правда никто не гарантирует, что сами потоки не будут изменять содержимое. Например, если вызывать ф-цию begin() из разных потоков, то она гарантировано вернёт одно и то же, если же в самом потоке писать в этот инетратор, то ...
Код

void Thread1::run() {
    *vect->begin() = IntVect::value_type();
}
void Thread2::run() {
    IntVect::value_type x = *vect->begin();
}

так что говорить, что
Цитата(alexvs11 @  16.2.2011,  23:51 Найти цитируемый пост)
студийный stl должен быть потокобезопасным

некорректно

Цитата(alexvs11 @  17.2.2011,  15:42 Найти цитируемый пост)
The SGI implementation of STL

в студии используют Hewlett-Packard implementation, насколько я знаю.



--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
alexvs11
Дата 17.2.2011, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


hell is here
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 21.8.2010

Репутация: 6
Всего: 10



Цитата(alexvs11 @  17.2.2011,  00:25 Найти цитируемый пост)
еще в критических секция должны быть все куски кода, где идет доступ к его содержимому


Цитата(azesmcar @  17.2.2011,  15:59 Найти цитируемый пост)
Вот он! Контейнер потокобезопасен для чтение, но не для записи. Если мы вернемся к исходнику в первом посте, мы увидем, что ТС пытается удалить элемент из контейнера, что никак нельзя назвать чтением.


вы не поверите

PM MAIL   Вверх
azesmcar
Дата 17.2.2011, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



alexvs11

Заметье, я ничего не писал по поводу второго сообщения. Я возразил против первого. Или вы продолжаете утверждать, что студийная реализация STL потокобезопасна?
PM   Вверх
alexvs11
Дата 17.2.2011, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


hell is here
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 21.8.2010

Репутация: 6
Всего: 10



Цитата(borisbn @  17.2.2011,  15:59 Найти цитируемый пост)
в студии используют Hewlett-Packard implementation, насколько я знаю.

они прародители стандартного стла, привык читать маны оттуда, согласен что он не является стандартным на текущий момент
http://www.sgi.com/tech/stl/
внизу подпись 
Цитата

Copyright © 1994
Hewlett-Packard Company

между прочем

Добавлено @ 16:11
Цитата(azesmcar @  17.2.2011,  16:03 Найти цитируемый пост)
Заметье, я ничего не писал по поводу второго сообщения. Я возразил против первого. Или вы продолжаете утверждать, что студийная реализация STL потокобезопасна?

я неправильно выразился, этим имел в виду, что если синхронизация правильная, то проблемы у автора, а не у stl'a
а в многопоточной среде бывает что и при синхронизации работает не так, взять тот же небезопасный CreateThread и безопасный _beginthread

Это сообщение отредактировал(а) alexvs11 - 17.2.2011, 16:13
PM MAIL   Вверх
mes
Дата 17.2.2011, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(borisbn @  17.2.2011,  09:14 Найти цитируемый пост)
много раз слышал это из разных источников, но не могу понять, почему именно ?

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



--------------------
PM MAIL WWW   Вверх
alexvs11
Дата 17.2.2011, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


hell is here
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 21.8.2010

Репутация: 6
Всего: 10



кстати, методы контейнера ведь и не обязаны быть виртуальными, правильно я понимаю?  smile 
тогда это вообще лишает принципиального смысла наследование - подсунуть под указателем list уже не удастся, а схожесть интерфейса решится обычным делегированием

Это сообщение отредактировал(а) alexvs11 - 17.2.2011, 16:50
PM MAIL   Вверх
borisbn
Дата 17.2.2011, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Цитата(mes @  17.2.2011,  16:34 Найти цитируемый пост)
расшить/изменить интерфейс не нарушив логической полноценности является трудно выполнимой задачей.. 

а почему, если я добавлю в deque такие ф-ции
Код

T MyDeque::take_front() {
  T res = front();
  pop_front();
  return res;
}

T MyDeque::take_back() {
  T res = back();
  pop_back();
  return res;
}

я "нарушу локическую полноценность" ?
mes, если не сложно, можете на конкретном примере пояснить, почему же наследоваться от stl - не есть хорошо ? Объяснение "а вот тут ты сам можешь потом забыть и (не)использовать эту штуку" - принимаются. Спасибо.


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
baldina
Дата 17.2.2011, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 32
Всего: 101



Цитата(borisbn @  17.2.2011,  15:09 Найти цитируемый пост)
baldina, в твоём случае удаляться все элементы, а в варианте с while - только первый, т.к. там стоит break;

да, так. хотя телепатия подсказала что break там скорее для оптимизации.
PM MAIL   Вверх
mes
Дата 17.2.2011, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Добавлено @ 17:11
перенесено в соответствующую тему.. 



Это сообщение отредактировал(а) mes - 17.2.2011, 19:07


--------------------
PM MAIL WWW   Вверх
alexvs11
Дата 17.2.2011, 17:19 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


hell is here
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 21.8.2010

Репутация: 6
Всего: 10



borisbn, концептуально наследование должно использоваться для специализации одной сущности к другой, общему deque к конкретному MyDeque, так чтобы конкретный MyDeque мог использоваться как специализированный MyDeque и как общий deque
но тут возникают две концептуальные проблемы
1) стандартный deque не предназначен для специализации ( отсутствие виртуальных функций, protected полей итп ).
2) само отсутствие виртуальных функций делает невозможное использование вашего MyDeque как общего deque

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

Это сообщение отредактировал(а) alexvs11 - 17.2.2011, 17:20
PM MAIL   Вверх
mes
Дата 17.2.2011, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(alexvs11 @  17.2.2011,  16:19 Найти цитируемый пост)
 и связанность между классами будет меньше 

тут больше подходит не "связанность", а "сцепление" или "зависимость".. 


Это сообщение отредактировал(а) mes - 17.2.2011, 17:32


--------------------
PM MAIL WWW   Вверх
borisbn
Дата 17.2.2011, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Цитата(mes @  17.2.2011,  17:10 Найти цитируемый пост)
и это оффтопик.. лучше заведите свою тему.. или хотя бы продолжите более подходящую.. 

согласен на 99,9(9). создал


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0641 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.