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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Остановка программы без предложения "Нажать любую клавишу" http://www.cyberforum.ru/cpp-beginners/thread1238632.html
в чистых сях для остановки в конце программы (чтобы не закрылась) я юзал getch, а что юзать в плюсах? кроме system("pause")? потому что если мне допустим не нравится что там оно пишет "нажмите любую клавишу", хочу чтоб просто останавливалось и ждало нажатия...
C++ Считать строку с пробелами с помощью Std::cin перехожу с чистого си на плюсы, начал разбираться с cin и заметил такую штуку что она читает введенную строку только до первого же пробела... а как сделать чтобы всю строку читала? вот например так делаю: #include <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv) { cout << "Hello world !\n"; 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 <int, int> mapp;
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
Сообщений: 185
05.08.2014, 12:37     Поток, удаляющий элементы, воспринимает контейнер пустым
Есть два потока, один только кладет в контейнер, другой удаляет элемент, почему то поток который удаляет элемент, воспринимает контейнер пустым.
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);
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 05:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru