简介
在多线程操作中,为了避免对线程共享数据的操作冲突,一般会使用互斥锁,如 mutex。为了让结构更加合理,在本文中,作者利用模板,定义了一个通用的线程间操作安全的模板对象类。
原理
基本原理是使用模板支持不同的数据类型,然后在模板类中通过一个互斥锁,实现加锁和解锁操作,从而避免数据在多线程操作中的冲突。
具体实现代码如下所示:
// LockableObject.h
#include <mutex>
template <typename T>
class LockableObject{
private:
mutex m;
public:
T data;
locker()=default;
locker(const T& t){
data = t;
}
void lock(){
m.lock();
}
void unlock(){
m.unlock();
}
使用示例
以下通过LockableObject定义了一个字符串对象,代码如下所示:
// test.cpp
#include <iostream>
#include <string>
#include "LockableObject.h"
using namespace std;
int main() {
LockableObject<string> obj{"tom"};
obj.lock();
cout << lo.data << endl;
obj.unlock();
return 0;
}
小结
通过此类的定义,用户可以很方便地定义线程安全的对象,然后通过这个对象的 lock 和 unlock 进行加锁和解锁操作,以保证数据在共享时的安全。