0 / 0 / 0
Регистрация: 23.11.2012
Сообщений: 14
1

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

18.03.2013, 13:19. Показов 956. Ответов 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);
    }
};
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.03.2013, 13:19
Ответы с готовыми решениями:

Не является внутренней или внешней командой - ошибка не при компиляции а при работе программы
В VS скомпилировал код #include &lt;iostream&gt; using namespace std; int main() { int a;...

Ошибка при работе с памятью
Есть класс, в котором я предпринимаю безрезультатные попытки работать с динамической памятью из-за...

Ошибка при работе с графикс.аш
Здравствуйте Прошу вас помочь мне осилить активно сопротивляющуюся мне лабу, которую я даже не...

Ошибка при работе со структурой
Доброго времени суток! возник очередной глупый вопрос - ЧТДН? Объявил массив указателей на...

1
1456 / 793 / 257
Регистрация: 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();
    }
};
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.03.2013, 14:07
Помогаю со студенческими работами здесь

Ошибка при работе с графикой
Написал свою первую програмку на графику: Код: #include &lt;graphics.h&gt; #include &lt;stdio.h&gt;...

Ошибка при работе с массивами
Здравствуйте. Хочу сделать программу, которая сортирует цифры. Вот код: #include &lt;iostream&gt; ...

Ошибка при работе программы
Здравствуйте! У меня такая проблема, вылетает программа. Она работает, компилируется, данные...

Ошибка при работе с файлами
Всем привет! Подккажите, плиз, что у меня неправильно в коде: #include &lt;cstdlib&gt; #include...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru