基础能力-加解锁

简介: 关于加解锁的两种实现方式方案一:使用C++11 atomic_flag原子特性实现细粒度加解锁#ifndef YAGER_MUTEX_H#define YAGER_MUTEX_H#include class CYagerMute...

关于加解锁的两种实现方式

方案一:使用C++11 atomic_flag原子特性实现细粒度加解锁
#ifndef YAGER_MUTEX_H
#define YAGER_MUTEX_H

#include <atomic>

class CYagerMutex
{
public:
    CYagerMutex()
        : m_atomicFlag(ATOMIC_FLAG_INIT)
    {}

    ~CYagerMutex()
    {}

    void Lock()
    {
        while (m_atomicFlag.test_and_set());
    }

    void UnLock()
    {
        m_atomicFlag.clear();
    }

private:
    std::atomic_flag  m_atomicFlag;

};
#endif //YAGER_MUTEX_H
方案二:使用libuv的mutex,实现粗粒度的加解锁
#include "libuv/include/uv.h"

class CYagerMutex
{
public:
    CYagerMutex()
    {
        uv_mutex_init(&m_mutex);
    }

    ~CYagerMutex()
    {
        uv_mutex_destroy(&m_mutex);
    }

    void Lock()
    {
        uv_mutex_lock(&m_mutex);
    }

    void UnLock()
    {
        uv_mutex_unlock(&m_mutex);
    }

private:
    uv_mutex_t	m_mutex;

};

关于加解锁的两种实现方式

方案一:使用C++11 atomic_flag原子特性实现细粒度加解锁
#ifndef YAGER_MUTEX_H
#define YAGER_MUTEX_H

#include <atomic>

class CYagerMutex
{
public:
    CYagerMutex()
        : m_atomicFlag(ATOMIC_FLAG_INIT)
    {}

    ~CYagerMutex()
    {}

    void Lock()
    {
        while (m_atomicFlag.test_and_set());
    }

    void UnLock()
    {
        m_atomicFlag.clear();
    }

private:
    std::atomic_flag  m_atomicFlag;

};
#endif //YAGER_MUTEX_H
方案二:使用libuv的mutex,实现粗粒度的加解锁
#include "libuv/include/uv.h"

class CYagerMutex
{
public:
    CYagerMutex()
    {
        uv_mutex_init(&m_mutex);
    }

    ~CYagerMutex()
    {
        uv_mutex_destroy(&m_mutex);
    }

    void Lock()
    {
        uv_mutex_lock(&m_mutex);
    }

    void UnLock()
    {
        uv_mutex_unlock(&m_mutex);
    }

private:
    uv_mutex_t	m_mutex;

};
目录
相关文章
|
7月前
|
存储 数据采集 分布式计算
大规模数据处理:解锁现代技术与商业的无限潜能
在当今信息爆炸的时代,大规模数据处理成为了推动技术和商业创新的关键。本文将探讨大规模数据处理的意义和应用,并介绍其对现代社会带来的深远影响。
45 1
|
机器学习/深度学习 存储 算法
竞争学习原理与策略| 学习笔记
快速学习竞争学习原理与策略。
竞争学习原理与策略| 学习笔记
|
人工智能 算法 数据挖掘
【技术揭秘】解锁声纹技术中的说话人日志
说话人日志(speaker diarization)也叫说话人分离,它是从一个连续的多人说话的语音中切分出不同说话人的片段,并且判断出每个片段是哪个说话人的过程。借助说话人日志技术可以完成对音频数据流的结构化管理,具有广泛的应用价值,例如可以利用分离结果进行说话人自适应,以提高语音识别的准确率;可以辅助会议、电话数据进行自动转写构建说话人的音频档案;也可以利用说话人分离技术,实现语料库的自动跟踪和标注。
【技术揭秘】解锁声纹技术中的说话人日志
|
4月前
|
存储 算法 大数据
解锁数据新势能:探索G-SCD on DeltaLake方案带来的革新
【8月更文挑战第26天】在数据驱动的商业环境下,G-SCD on DeltaLake方案凭借DeltaLake的开源存储技术,有效解决了传统数据处理方案在实时性、准确性及可靠性上的局限。该方案通过精确的增量处理减少整体数据扫描,利用版本控制确保数据变更的可追溯性,优化并发处理以提高数据一致性,采用高效的存储格式降低成本,并简化数据处理流程以降低维护难度,从而成为应对大数据挑战的理想选择,助力企业释放数据价值,促进业务增长。
34 1
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
解锁智能未来的无限可能
【10月更文挑战第22天】解锁智能未来的无限可能
15 0
|
2月前
|
缓存 监控 算法
代码性能优化:解锁应用潜能的关键策略
【10月更文挑战第20天】代码性能优化:解锁应用潜能的关键策略
|
2月前
|
缓存 监控 数据库
性能优化:解锁应用与系统的极致速度
【10月更文挑战第20天】性能优化:解锁应用与系统的极致速度
40 0
|
3月前
|
传感器 物联网 5G
5G的三大主要特性:解锁未来无限可能
5G的三大主要特性:解锁未来无限可能
117 1
|
2月前
|
安全 Java 数据库连接
Python多线程编程:竞争问题的解析与应对策略【2】
Python多线程编程:竞争问题的解析与应对策略【2】
30 0
|
2月前
|
安全 Java 数据库连接
Python多线程编程:竞争问题的解析与应对策略
Python多线程编程:竞争问题的解析与应对策略
28 0