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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Остановка программы без предложения "Нажать любую клавишу" http://www.cyberforum.ru/cpp-beginners/thread1238632.html
в чистых сях для остановки в конце программы (чтобы не закрылась) я юзал getch, а что юзать в плюсах? кроме system("pause")? потому что если мне допустим не нравится что там оно пишет "нажмите любую...
C++ Считать строку с пробелами с помощью Std::cin перехожу с чистого си на плюсы, начал разбираться с cin и заметил такую штуку что она читает введенную строку только до первого же пробела... а как сделать чтобы всю строку читала? вот например так... http://www.cyberforum.ru/cpp-beginners/thread1238614.html
C++ Mircosoft Visio Export AddIn, есть у кого нибуть сэмпл на плюсах ?
Доброго! Может кто писал для Visio плагины? Есть ли линк или сэмпл на С++ для экспорта модели ? Ну или на шарпе на крайний случай :D Ну или линк на док по описанию девелопмента плагинов ...
Пройти по любому разрешенному пути игрового поля от верхнего левого угла до правого нижнего C++
Всем привет! Решаю вот такую простую задачку: Игровое поле N x M заполняется целыми числами, одно неотрицательное целое число в каждой клетке. Цель игры состоит в том, чтобы пройти по любому...
C++ Правильно ли реализована передача указателя на контейнер http://www.cyberforum.ru/cpp-beginners/thread1238574.html
Я сомневаюсь, правильно ли я передаю указатель на контейнер void put (multimap <int, int> *map2) { multimap <int, int> map3 = *map2; map3.erase( map3.begin () ); } int main() { multimap...
C++ Бесконечный цикл и EOF в VS 2013 #include "stdafx.h" #include <iostream> #include <stdio.h> #include <math.h> #include <string> #include <cstdlib> #include <vector> using namespace std; int main(void) подробнее

Показать сообщение отдельно
mhg
2 / 2 / 2
Регистрация: 21.04.2013
Сообщений: 192

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

05.08.2014, 12:37. Просмотров 249. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru