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

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

Войти
Регистрация
Восстановить пароль
 
mhg
2 / 2 / 2
Регистрация: 21.04.2013
Сообщений: 191
#1

Поток, удаляющий элементы, воспринимает контейнер пустым - C++

05.08.2014, 12:37. Просмотров 235. Ответов 4
Метки нет (Все метки)

Есть два потока, один только кладет в контейнер, другой удаляет элемент, почему то поток который удаляет элемент, воспринимает контейнер пустым.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
//mutex
pthread_mutex_t count_mutex;
 
//поток кладет в контейнер 
void put1 (multimap <int, int> *map2)
{
multimap <int, int> *map3 = map2;
while (1)
{
pthread_mutex_lock (&count_mutex);
printf("mutex start %d", getpid());
flushall();
printf ("put");
map3->insert( pair <int, int >(3,5));
printf ("mutex stop %d", getpid ());
pthread_mutex_unlock (&count_mutex) ;
}
}
 
//Поток удаляет из контейнера
void get(multimap <int, int> *map2)
{
multimap <int, int> *map3 = map2;
while (1)
{
pthread_mutex_lock (&count_mutex);
printf("mutex start %d", getpid());
flushall();
if(! map3->empty())
{
printf ("erase");
map3->erase(map3->begin ());}
else{
printf ("map empty ");}
 
printf ("mutex stop %d", getpid ());
pthread_mutex_unlock (&count_mutex) ;
}
}
 
int main ()
{
multimap < int, int> mapp;
mapp.insert (pair <int, int>(3, 5));
pid_t pid;
if (pid = fork()){}
else{
get(&mapp);
}
put1(&mapp);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.08.2014, 12:37     Поток, удаляющий элементы, воспринимает контейнер пустым
Посмотрите здесь:

char не воспринимает %c, но воспринимает %s - C++
Вопрос в строке &quot;fprintf(f, &quot;%s&quot;, text);&quot;. Переменная text имеет тип char, однако если я пишу %c, то текст в файл не выводится, а если пишу...

Записать неповторяющиеся элементы в новый контейнер - C++
Помогите, пожалуйста, нужно написать программу на экзамене Написать функцию, перебирающую элементы контейнера, и записывающую...

Сжать массив, выбросив из него отрицательные элементы - массив становится пустым - C++
Задачка такая: Разработать программу, обеспечивающую ввод с клавиатуры целых чисел и сохранение их в одномерном массиве. Ввод...

удалить из массива повторяющиеся элементы, оставив только их первые вхождения. класс-контейнер вектор - C++
Добрый день!!! Не могли бы помочь написать программу на С++ при помощи класса-контейнера вектора. вот код)) Заранее спасибо! #include...

Не воспринимает проверку - C++
#include &quot;stdafx.h&quot; #include &quot;stdio.h&quot; #include &quot;string&quot; #include &quot;conio.h&quot; #define NMAX 4 void vvod(double m, char name) ...

Не воспринимает кириллицу - C++
Есть программа - вводим текст, выводит самое длинное слово. #include &lt;iostream&gt; using namespace std; char longest_word; unsigned...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SatanaXIII
Супер-модератор
Эксперт С++
5604 / 2638 / 242
Регистрация: 01.11.2011
Сообщений: 6,497
Завершенные тесты: 1
05.08.2014, 12:40     Поток, удаляющий элементы, воспринимает контейнер пустым #2
В одиннадцатой и двадцать седьмой строке кавычки закрывающие забыли.
mhg
2 / 2 / 2
Регистрация: 21.04.2013
Сообщений: 191
05.08.2014, 16:22  [ТС]     Поток, удаляющий элементы, воспринимает контейнер пустым #3
Вывод на консоль:
mutex start 1171483
Insert
Mutex stop 1171483
mutex start 1171467
Erase
Mutex stop 1171467
mutex start 1171483
Insert
Mutex stop 1171483
mutex start 1171467
Map empty
Mutex stop 1171467
mutex start 1171483
Insert
Mutex stop 1171483
mutex start 1171467
Map empty
Mutex stop 1171467

Добавлено через 1 минуту
Ага, с телефона набираю

Добавлено через 3 часа 32 минуты
Проблема решена, создавать второй поток лучше функцией pthread_create(), fork() здесь лучше не использовать
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
05.08.2014, 16:40     Поток, удаляющий элементы, воспринимает контейнер пустым #4
Цитата Сообщение от mhg Посмотреть сообщение
Проблема решена, создавать второй поток лучше функцией pthread_create(), fork() здесь лучше не использовать
ололо...иди учи матчасть и читай доку. fork вообще другой процесс создает с другим адресным пространством
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.08.2014, 16:51     Поток, удаляющий элементы, воспринимает контейнер пустым
Еще ссылки по теме:

Студия не воспринимает операторы С++ - C++
С недавнего времени Visual Studio 2010 перестал идентифицировать операторы С++. Для примера в этом коде #include &lt;iostream&gt; #include...

Не воспринимает тип данных - C++
Задача: Найти все натуральные n-значные числа, цифры в которых образуют строго возрастающую последовательность (например, 1234, 5789). ...

VS не воспринимает пользовательские классы - C++
Делал задачу: работа с коллекцией прямоугольников. За создание, удаление и хранение отвечает отдельный класс. Выбор действия организован с...

Не воспринимает русский язык - C++
Очень нужна помощь , стипендия горит. Никак не могу исправить , при выводе всех значений не выводит русский, а иероглифы . Знаю что тема...

Вижал студио не воспринимает чар - C++
Проблема с тем, что вижал студио не воспринимает мой ввод функций вычитания сложения и проч. Если сделать с помощью банального...

Компилятор не воспринимает русские буквы - C++
Допустим. дано предложение: &quot;Я хочу выучить С++&quot;. Нужна найти количество вхождений буквы &quot;о&quot; в предложение. Как это сделать, если...


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

Или воспользуйтесь поиском по форуму:
mhg
2 / 2 / 2
Регистрация: 21.04.2013
Сообщений: 191
05.08.2014, 16:51  [ТС]     Поток, удаляющий элементы, воспринимает контейнер пустым #5
У меня до последнего момента была уверенность что fork() создает поток, надо быть внимательней
Yandex
Объявления
05.08.2014, 16:51     Поток, удаляющий элементы, воспринимает контейнер пустым
Ответ Создать тему
Опции темы

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