Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
KuKu
1559 / 1037 / 78
Регистрация: 17.04.2009
Сообщений: 2,995
#1

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

06.09.2011, 07:37. Просмотров 931. Ответов 10
Метки нет (Все метки)

Добрый день! Является ли безопасным одновременная работа с stl'ным stack'ом в несколько потоков?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.09.2011, 07:37
Я подобрал для вас темы с готовыми решениями и ответами на вопрос stack, потоки (C++):

Есть ли связь между STL-stack и stack - высокопроизводительная память? - C++
Куча источников, как всегда много отсебятины, в общем я запутался...

Ошибка: "Unhandled exception: Stack cookie instrumentation code detected a stack-based buffer overrun" - C++
Не могу понять почему значение ChoiceOfPlayer меняется и почему NumberOfRow и NumberOfColumn всегда последние значение цикла. Помогите...

Что такое потоки ввода, потоки вывода? - C++
Здарова всем! Не так давно уже прогаю на С++ и все НИКАК не могу понять, что такое потоки ввода, потоки вывода..! вот допустим...

stack - C++
не могу норм прокомпилировать прогу, вот код, подскажите что не так! #include <stack> #include <iostream> int main() { const int...

Реализация stack - C++
Задание реализовать stack, первым делом написал добавление элемента и показ всего stack, заполнив его цифрами от 0 до 9, но при показе...

Удаление в stack - C++
Помогите пожалуйста решите проблему. Мне надо создать структуру данных через stack void stack :: add(printer addp) { qelem...

10
ForEveR
В астрале
Эксперт С++
7992 / 4751 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
06.09.2011, 08:50 #2
KuKu, Вообще STL по идее не потокобезопасный... Насколько я знаю.
1
KuKu
1559 / 1037 / 78
Регистрация: 17.04.2009
Сообщений: 2,995
06.09.2011, 11:04  [ТС] #3
А жаль( В душе теплилась надежда, что где-то, в глубине стандарта, написано обратное
0
ForEveR
В астрале
Эксперт С++
7992 / 4751 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
06.09.2011, 11:13 #4
KuKu, По сути стандарт ничего не упоминает о потоках (98/03)... Следовательно не потокобезопасно. Однако mutex-ы никто не отменял.
0
alex_x_x
бжни
2454 / 1659 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
06.09.2011, 11:55 #5
безопасно существование в многопоточной среде, но доступ к стеку должен происходить раздельно
0
KuKu
1559 / 1037 / 78
Регистрация: 17.04.2009
Сообщений: 2,995
06.09.2011, 12:24  [ТС] #6
безопасно существование в многопоточной среде,
А существуют объекты, у которых не безопасно существование в многопоточной среде?
0
alex_x_x
бжни
2454 / 1659 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
06.09.2011, 14:50 #7
Цитата Сообщение от KuKu Посмотреть сообщение
А существуют объекты, у которых не безопасно существование в многопоточной среде?
объекты могут зависить от глобальных объектов и от статический переменных, все работает пока оно используется одним потоком, как только несколько - сходит с ума
например винда имеет библиотеки libc.lib, libcd.lib - single-threaded
а есть libcmt.lib, msvcrt.lib и все остальные
1
xAtom
917 / 742 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
06.09.2011, 17:40 #8
С любым массивом, списком, стеком работать в различных потоках программы не безопасно так как данные могут быть изменены каким нибудь потоком не дожидаясь работы других потоков, для этого есть способы синхронизации потоков для работы с общим ресурсом(массивом, файлом и т.д) использование таймеров ожидания, событий, семафоров, критических секций, мьютекс.

По ходу твоего вопроса тебе нужна последовательность операции со стеком так как стек однопроходный по LIFO не затрагивая верхушку стека - top, для этого очень просто реализовать одновременную работу стека в потоках, создать стек глобальным или в стеке основной программы передать указатель на стек потокам как параметр и работать для этого подходит синхронизирующий объект критическая секция. Нужно понимать что потоки работают параллельным способом особенно в нашу многоядерную эпоху процессоров, без синхронизации при работе с одним объектом можно получить просто mixed кашу особенно речь идёт если ресурс будет write/update/delete...
0
KuKu
1559 / 1037 / 78
Регистрация: 17.04.2009
Сообщений: 2,995
07.09.2011, 21:51  [ТС] #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);
}
0
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
07.09.2011, 21:54 #10
KuKu,
Как нельзя делать синхронизацию!

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

while( некое_условие ) {}
Здесь все что вам нужно (если под windows): http://www.sofmos.com/lyosha/Articles/multithreading2.html
1
KuKu
1559 / 1037 / 78
Регистрация: 17.04.2009
Сообщений: 2,995
07.09.2011, 21:58  [ТС] #11
у дураков мысли сходятся
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.09.2011, 21:58
Привет! Вот еще темы с ответами:

STL stack - C++
не мог бы кто нить обьяснить этот код!Гуглил и нашел!не могли бы комменты поставить По идее так должен выводить! Ввод ...

Stack was corrupted - C++
Будьте добры, объясните, почему такая ошибку выдает: Run-Time Check Failure #2 - Stack around the variable 'My' was corrupted. ...

Контейнер stack - C++
есть функция, которая возвращает контейнер stack(точнее ссылку на его верхний элемент return binary.top();). как можно достать все...

Stack.top в c++ - C++
На VS при компиляции выходит ошибка (75ая строка): не существует подходящей функции преобразования из "Tree" в "Tree * Что я делаю не...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru