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

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

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

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

05.08.2014, 12:37. Просмотров 253. Ответов 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);
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.08.2014, 12:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Поток, удаляющий элементы, воспринимает контейнер пустым (C++):

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

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

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

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

Предикат, удаляющий из исходного списка элементы с четными номерами - Prolog
Помогите с программой пожалуйста. Создайте предикат, удаляющий из исходного списка элементы с четными номерами

Элемент-контейнер, центрирующий дочерние элементы - C#
Здравствуйте! Подскажите как сделать, чтоб элемент управления (а в идеале, несколько) всегда был по центру своего контейнера? Точнее, какой...

4
SatanaXIII
Супер-модератор
Эксперт С++
5642 / 2677 / 252
Регистрация: 01.11.2011
Сообщений: 6,574
Завершенные тесты: 1
05.08.2014, 12:40 #2
В одиннадцатой и двадцать седьмой строке кавычки закрывающие забыли.
0
mhg
2 / 2 / 2
Регистрация: 21.04.2013
Сообщений: 192
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() здесь лучше не использовать
0
Jupiter
Каратель
Эксперт С++
6561 / 3982 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
05.08.2014, 16:40 #4
Цитата Сообщение от mhg Посмотреть сообщение
Проблема решена, создавать второй поток лучше функцией pthread_create(), fork() здесь лучше не использовать
ололо...иди учи матчасть и читай доку. fork вообще другой процесс создает с другим адресным пространством
0
mhg
2 / 2 / 2
Регистрация: 21.04.2013
Сообщений: 192
05.08.2014, 16:51  [ТС] #5
У меня до последнего момента была уверенность что fork() создает поток, надо быть внимательней
0
05.08.2014, 16:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.08.2014, 16:51
Привет! Вот еще темы с ответами:

Стандартный контрол (контейнер) который мог бы в себе содержать элементы управления. - Visual Basic
Подскажите, есть какой либо стандартный контрол (контейнер) который мог бы в себе содержать элементы управления, а при большом их...

[ASP.NET] Как в элемент-контейнер добавить программно другие элементы? - Visual Basic .NET
Как внутрь элемента контейнера программно добавлять другие элементы, например раскрывающиеся списки, labels или просто выводить туда текст?...

Как добавить элементы в контейнер, который создан на основе двунаправленного упорядоченного замкнутого списка? - C#
?Как добавить элементы в контейнер, который создан на основе двунаправленного не замкнутого списка с заголовком

Js скрипт удаляющий http:// - JavaScript
Необходимо на js написать скрипт, который будет удалять из поля http:// и https:// . Может получится этот переделать (но он наоборот...


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

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

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