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

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

Восстановить пароль Регистрация
 
Ko
 Аватар для Ko
-65 / 5 / 0
Регистрация: 23.12.2011
Сообщений: 246
13.07.2015, 04:37     Класс очереди не выводит значение #1
что не правильно? хочу как в векторе отдать обратно значение

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);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.07.2015, 04:37     Класс очереди не выводит значение
Посмотрите здесь:

C++ Класс Время - выводит непонятную ошибку
класс компилируется но не чего не выводит на экран C++
C++ Среднее значение элементов очереди
C++ Написать класс, который создает и выводит массив
Шаблонный класс очереди. Выводит сначала все индексы, потом все элементы C++
Написать программу, которая по введенному году обучение в школе, выводит соответствующий класс. (11,10,9) C++
Реализовать класс MyQueue, позволяющий хранить данные любого типа в виде очереди C++
While/do while по очереди вводятся данные, определить среднее значение C++
Класс Triangle, при вводе сторон и угла не выводит результат C++
C++ Класс выводит некорректный результат
Класс: Почему неправильно считает и выводит на экран страшное число? C++
C++ Извлечь из очереди начальные элементы и вывести их значения и новые адреса начала и конца очереди

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
12271 / 6958 / 782
Регистрация: 27.09.2012
Сообщений: 17,259
Записей в блоге: 2
Завершенные тесты: 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;//данные могут устареть
    }
Ko
 Аватар для Ko
-65 / 5 / 0
Регистрация: 23.12.2011
Сообщений: 246
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 раз пока результат придёт.
Yandex
Объявления
13.07.2015, 08:37     Класс очереди не выводит значение
Ответ Создать тему
Опции темы

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