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

Ошибка при работе с мютексом - C++

Восстановить пароль Регистрация
 
borakula9
0 / 0 / 0
Регистрация: 23.11.2012
Сообщений: 14
18.03.2013, 13:19     Ошибка при работе с мютексом #1
Пытаюсь написать класс защищенный стек, но получаю ошибку при работе с мютексом: error C2248: std::mutex::mutex: невозможно обратиться к private член, объявленному в классе "std::mutex"
Вот описание класса:
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
template <class Type> class locked_stack
{
private:
    mutex m;
    stack<Type> stck;
public:
    locked_stack(){}
public: 
void lck_pop()
    {
        lock_guard<mutex>lock(m);
        if( !stck.empty())
            stck.pop();
    }
 
Type lck_top()
    {
        lock_guard<mutex>lock(m);
        return stck.top();
    }
 
Type& top_pop()
    {
        lock_guard<mutex>lock(m);
        if(stck.empty()) return NULL;
        Type obj = new Type();
        obj=top.stck();
        pop.stck();
        return obj; ///?????
    }
 
Type top_pop1()
    {
        lock_guard<mutex>lock(m);
        if(stck.empty()) return stck.top();
        Type obj=stck.top();
        stck.pop();
        return obj;
    }
 
void lck_push(Type obj)
    {
        lock_guard<mutex>lock(m);
        stck.push(obj);
    }
};
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.03.2013, 13:19     Ошибка при работе с мютексом
Посмотрите здесь:

Ошибка при работе с файлом C++
Ошибка при работе с портами. C++
Ошибка при работе с графикс.аш C++
ошибка при работе с памятью C++
C++ Ошибка при работе со структурой
C++ Ошибка при работе с объектами
Ошибка при работе со строками C++
Ошибка при работе с классами C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
18.03.2013, 14:07     Ошибка при работе с мютексом #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
struct empty_stack: std::exception
{
    const char* what() const throw()
    {
        return "empty stack";
    }
    
};
 
template<typename T>
class threadsafe_stack
{
private:
    std::stack<T> data;
    mutable std::mutex m;
public:
    threadsafe_stack(){}
    threadsafe_stack(const threadsafe_stack& other)
    {
        std::lock_guard<std::mutex> lock(other.m);
        data=other.data;
    }
    threadsafe_stack& operator=(const threadsafe_stack&) = delete;
 
    void push(T new_value)
    {
        std::lock_guard<std::mutex> lock(m);
        data.push(new_value);
    }
    std::shared_ptr<T> pop()
    {
        std::lock_guard<std::mutex> lock(m);
        if(data.empty()) throw empty_stack();
        std::shared_ptr<T> const res(std::make_shared<T>(data.top()));
        data.pop();
        return res;
    }
    void pop(T& value)
    {
        std::lock_guard<std::mutex> lock(m);
        if(data.empty()) throw empty_stack();
        value=data.top();
        data.pop();
    }
    bool empty() const
    {
        std::lock_guard<std::mutex> lock(m);
        return data.empty();
    }
};
Yandex
Объявления
18.03.2013, 14:07     Ошибка при работе с мютексом
Ответ Создать тему
Опции темы

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