【多线程】C++实现原子计数器 for Pthreads

本文介绍了在多线程环境下,通过原子计数器来保证计数操作的一致性和线程安全。虽然原子计数器避免了锁的使用,但其在某些场景下可能比传统锁的开销更大,可以通过perf工具进行性能分析。
摘要由CSDN通过智能技术生成

在多线程环境下要计数,需要保证:计数变量的一致性和线程安全才能保证多线程环境下计数正确。

原子计数正是提供了此需求的功能,保证计数操作未执行完毕时绝不会被其他任何实务或事件打断,下面是原子计数器 for pthreads


缺点:使用锁的形式实现原子计数时锁的操作会比计数器的加减操作的消耗大很多,可以通过linux自带的性能检测工具perf命令查看哪些操作消耗多。

#ifndef __ATOMICCOUNTER_H__
#define __ATOMICCOUNTER_H__

#if defined(__linux__)
//CAtomicCounter.h for Pthreads
#include <pthread.h>
	
class CAtomicCounter 
{
private:
	class CGuard //pthread_mutex_t锁的守护者类CGuard	
	{
	public:
		CGuard(pthread_mutex_t & mutex):m_mutex(mutex)
		{
			pthread_mutex_lock(&m_mutex);
		}
		~CGuard()
		{
			pthread_mutex_unlock(&m_mutex);
		}
	private:
		pthread_mutex_t	m_mutex;
	};

private:
	CAtomicCounter(CAtomicCounter const&);//禁止拷贝构造
	CAtomicCounter& operator=(CAtomicCounter const&);//禁止赋值构造

public:
	/// 需要显示调用此构造函数,阻止使用编译器提供的默认构造函数
	explicit CAtomicCounter(long n) : m_cnt(n)	
	{
		pthread_mutex_init(&m_mutex,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值