一个自定义的C++线程安全的对象模板

简介

在多线程操作中,为了避免对线程共享数据的操作冲突,一般会使用互斥锁,如 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 进行加锁和解锁操作,以保证数据在共享时的安全。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值