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

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

Войти
Регистрация
Восстановить пароль
 
Ko
-65 / 5 / 0
Регистрация: 23.12.2011
Сообщений: 247
#1

Класс очереди не выводит значение - C++

13.07.2015, 04:37. Просмотров 196. Ответов 2
Метки нет (Все метки)

что не правильно? хочу как в векторе отдать обратно значение

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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#pragma once
#include <vector>
#include <omp.h>
#include <algorithm>
#include <iostream>
#include <memory>
#include <mutex>
#include <condition_variable>
#include <thread>
#include <chrono>
#include <queue>
#include <algorithm>
#include <functional>
 
template <typename T>
class OmpQueue
{
private:
    omp_lock_t LockQueue;
    std::vector < T > Data;
    bool OmpQueue<T>::Duplication_Сheck( const T& value )
    {
        if ( std::find( Data.begin(), Data.end(), value ) != Data.end() )
            return true;
        else
            return false;
    }
public:
    OmpQueue();
    ~OmpQueue();
    std::size_t OmpQueue<T>::size()
    {
        omp_set_lock(&LockQueue);
        size_t result = Data.size();
        omp_unset_lock(&LockQueue);
        return result;
    }
    
    bool OmpQueue<T>::empty()
    {
        omp_set_lock(&LockQueue);
        bool result(true);
        if ( Data.size() != 0 )
        {
            result = false;
        }
        omp_unset_lock(&LockQueue);
        return result;
    }
 
    T OmpQueue<T>::front()
    {
        omp_set_lock(&LockQueue);
        T tmp =  Data.back();
        omp_unset_lock(&LockQueue);
        return tmp;
    }
};
 
 
template <typename T>
OmpQueue<T>::OmpQueue()
{
    omp_init_lock(&LockQueue);
}
template <typename T>
OmpQueue<T>::~OmpQueue()
{
    omp_destroy_lock(&LockQueue);
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.07.2015, 04:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Класс очереди не выводит значение (C++):

Шаблонный класс очереди. Выводит сначала все индексы, потом все элементы - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; const int SIZE=100; template&lt;class X&gt; class queue{ X q; ...

Ошибка в выводе данных, класс выводит правильно, а класс в классе - нет - C++
Неизвестная для меня проблема. Класс выводит данные правильно из Consigment, а вот третий экземпляр класса, работает не верно, если...

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

Среднее значение элементов очереди - C++
Всем доброго времени суток. Задача такова. Имеется структура const int n=27; struct Transport { char surname; // фамилия ...

не выводит класс в компиляции - C++
Добрый день, я создал класс, но при активиации компиляции -она сразу сворачивается, как в функции написать, что бы оно выводило класс? ...

Класс выводит некорректный результат - C++
Написал класс &quot;massiv&quot;, к нему несколько методов и все работает отлично. Проблема заключается вот в чем: Создаю переменную типа &quot;massiv&quot;,...

2
Croessmah
Эксперт CЭксперт С++
13514 / 7673 / 867
Регистрация: 27.09.2012
Сообщений: 18,896
Записей в блоге: 3
Завершенные тесты: 1
13.07.2015, 04:49 #2
Цитата Сообщение от Ko Посмотреть сообщение
что не правильно?
а в чем проблема?

Имеются проблемы с синхронизацией:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    std::size_t OmpQueue<T>::size()
    {
        omp_set_lock(&LockQueue);
        size_t result = Data.size();
        omp_unset_lock(&LockQueue);//сняли лок
        return result;//а теперь другой поток может изменить наш объект и пользователю вернутся устаревшие данные.
    }
    
    bool OmpQueue<T>::empty()
    {
        omp_set_lock(&LockQueue);
        bool result(true);
        if ( Data.size() != 0 )
        {
            result = false;
        }
        omp_unset_lock(&LockQueue);//тут тоже сняли лок
        return result;//данные могут устареть
    }
0
Ko
-65 / 5 / 0
Регистрация: 23.12.2011
Сообщений: 247
13.07.2015, 08:37  [ТС] #3
отбой я всё сделал

Добавлено через 1 минуту
а вот с синхронизацией как решить проблему?

Добавлено через 2 минуты
а как поток может изменить если мля в функции создаётся переменная? ты чё меня грузишь?

Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
std::size_t OmpQueue<T>::size()
    {
        omp_set_lock(&LockQueue);
        size_t result = Data.size();
        omp_unset_lock(&LockQueue);//сняли лок
        return result;//а теперь другой поток может изменить наш объект и пользователю вернутся устаревшие данные.
    }
ты тоже как и я ночь не спал?))) size_t result создаётся в функции возвращает то что было на ту наносекунду, остальное не кого не колышит, конечно другие 100 потоков могут изменить мой контейнер 99 раз пока результат придёт.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.07.2015, 08:37
Привет! Вот еще темы с ответами:

While/do while по очереди вводятся данные, определить среднее значение - C++
Вот код, но он, разумеется, не работает. Использование while/do while является обязательным. Помогите найти ошибку, пожалуйста! ...

класс компилируется но не чего не выводит на экран - C++
компилируется но не чего на экран не выводит вот код: #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;locale.h&gt; using...

Класс Время - выводит непонятную ошибку - C++
Вот собственно текст. Когда ремарю класс-наследник, то работает. Снимаю - выдает ошибку, уже не знаю что и делать... Помогите, пожалуйста. ...

Написать класс, который создает и выводит массив - C++
Помогите изменить этот код чтобы был класс который создает и выводит мой массив)7 #include &lt;iostream&gt; using namespace std; void...


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

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

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