cpp_mutable

mutable 关键字

mutabel 介绍

为什么std::mutex 前通常用mutable 修饰

在const成员函数中,对mutex的加锁和释放锁操作会违背const的不可变语义,所以,只能将mutex定义为mutable,从而可以在const修饰的函数中加锁,实现线程安全。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <mutex>
#include <iostream>
class Cal {
public:
Cal(int n) {num = n;}

void inc_num() {
std::lock_guard<std::mutex> lg(m);
++num;
}

int get_num() const { //const m 状态的改变会修改const 语义,但不报错?
std::lock_guard<std::mutex> lg(m);
return num;
}
private:
int num;
mutable std::mutex m;
};

int main() {
Cal c{0};
std::cout << c.get_num() << std::endl;
}

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!