Форум программистов, компьютерный форум CyberForum.ru

stack, потоки - C++

Восстановить пароль Регистрация
 
KuKu
 Аватар для KuKu
1538 / 1016 / 69
Регистрация: 17.04.2009
Сообщений: 2,946
06.09.2011, 07:37     stack, потоки #1
Добрый день! Является ли безопасным одновременная работа с stl'ным stack'ом в несколько потоков?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.09.2011, 07:37     stack, потоки
Посмотрите здесь:

C++ Stack overflow.
C++ Stack overflow
класс stack C++
stack C++
C++ Есть ли связь между STL-stack и stack - высокопроизводительная память?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
06.09.2011, 08:50     stack, потоки #2
KuKu, Вообще STL по идее не потокобезопасный... Насколько я знаю.
KuKu
 Аватар для KuKu
1538 / 1016 / 69
Регистрация: 17.04.2009
Сообщений: 2,946
06.09.2011, 11:04  [ТС]     stack, потоки #3
А жаль( В душе теплилась надежда, что где-то, в глубине стандарта, написано обратное
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
06.09.2011, 11:13     stack, потоки #4
KuKu, По сути стандарт ничего не упоминает о потоках (98/03)... Следовательно не потокобезопасно. Однако mutex-ы никто не отменял.
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
06.09.2011, 11:55     stack, потоки #5
безопасно существование в многопоточной среде, но доступ к стеку должен происходить раздельно
KuKu
 Аватар для KuKu
1538 / 1016 / 69
Регистрация: 17.04.2009
Сообщений: 2,946
06.09.2011, 12:24  [ТС]     stack, потоки #6
безопасно существование в многопоточной среде,
А существуют объекты, у которых не безопасно существование в многопоточной среде?
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
06.09.2011, 14:50     stack, потоки #7
Цитата Сообщение от KuKu Посмотреть сообщение
А существуют объекты, у которых не безопасно существование в многопоточной среде?
объекты могут зависить от глобальных объектов и от статический переменных, все работает пока оно используется одним потоком, как только несколько - сходит с ума
например винда имеет библиотеки libc.lib, libcd.lib - single-threaded
а есть libcmt.lib, msvcrt.lib и все остальные
xAtom
 Аватар для xAtom
910 / 735 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
06.09.2011, 17:40     stack, потоки #8
С любым массивом, списком, стеком работать в различных потоках программы не безопасно так как данные могут быть изменены каким нибудь потоком не дожидаясь работы других потоков, для этого есть способы синхронизации потоков для работы с общим ресурсом(массивом, файлом и т.д) использование таймеров ожидания, событий, семафоров, критических секций, мьютекс.

По ходу твоего вопроса тебе нужна последовательность операции со стеком так как стек однопроходный по LIFO не затрагивая верхушку стека - top, для этого очень просто реализовать одновременную работу стека в потоках, создать стек глобальным или в стеке основной программы передать указатель на стек потокам как параметр и работать для этого подходит синхронизирующий объект критическая секция. Нужно понимать что потоки работают параллельным способом особенно в нашу многоядерную эпоху процессоров, без синхронизации при работе с одним объектом можно получить просто mixed кашу особенно речь идёт если ресурс будет write/update/delete...
KuKu
 Аватар для KuKu
1538 / 1016 / 69
Регистрация: 17.04.2009
Сообщений: 2,946
07.09.2011, 21:51  [ТС]     stack, потоки #9
Вечер добрый. А будет ли считаться функция myThread потокобезопаной? Возможно ли, что два потока одновременно выйдут из цикла? Если это потокобезопасно, то мьютексы устроены так же или они работают как-то на уровне операционной системы ?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int flag = 0;
//...
void* myThread(void* argv)
{
  while (flag!=0)
  {
    // Если компилятор это выбросит, то какой-нибудь подобный бесконечный цикл.
  }  
  flag = 1;
  another_function();
  flag = 0;
  return(0);
}
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
07.09.2011, 21:54     stack, потоки #10
KuKu,
Как нельзя делать синхронизацию!

Пожалуй самая большая глупость, какую только можно сделать чтобы приостановить поток – это загнать его в пустой цикл:

while( некое_условие ) {}
Здесь все что вам нужно (если под windows): http://www.sofmos.com/lyosha/Article...hreading2.html
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.09.2011, 21:58     stack, потоки
Еще ссылки по теме:

Stack overflow C++
C++ Класс stack
Ошибка: "Unhandled exception: Stack cookie instrumentation code detected a stack-based buffer overrun" C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
KuKu
 Аватар для KuKu
1538 / 1016 / 69
Регистрация: 17.04.2009
Сообщений: 2,946
07.09.2011, 21:58  [ТС]     stack, потоки #11
у дураков мысли сходятся
Yandex
Объявления
07.09.2011, 21:58     stack, потоки
Ответ Создать тему
Опции темы

Текущее время: 17:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru