原子访问与线程同步

windows 和 linux

  • Linux系统抢占式的多线程环境和Windows不一样。
    Linux系统下是多用户级线程,内核并不清楚多线程的存在,只是用一个叫做"运行时系统"完成对于多线程的管控,没有专门的线程调度算法;而Windows下是多核心级线程,内核可以直接对线程进行管理,线程的切换是以内核作为支持,线程是调度的基本单位。

原子访问

  • windows下有原子锁系列函数, 关键段, 关键段(带旋转锁) 读写锁等等
    内核对象有mutex , 信号量 等等
    极其精细

  • std::atomic<T>是C++11及以后版本中提供的一种原子类型,它保证了对其进行的操作(如加载、存储、交换、比较交换等)在多线程环境下是原子的,即这些操作在执行过程中不会被其他线程打断,从而保证了多线程环境下的数据安全性。这种原子类型在Linux下同样有效,因为Linux也支持C++标准库,并且std::atomic的实现通常与底层硬件和操作系统相关,但无论是Windows还是Linux,其原理都是利用底层硬件提供的原子操作指令来实现的
    C++标准库中提供了多种线程同步机制,这些机制帮助开发者确保多个线程之间对共享资源的正确访问,避免竞态条件和数据不一致的问题。以下是C++标准库中提供的一些主要线程同步函数和类:

  • 互斥锁(Mutexes)
    std::mutex: 最基本的互斥锁,用于保护共享资源免受同时访问。
    std::timed_mutex 和 std::recursive_mutex: 提供了额外的功能,如尝试锁定和递归锁定。
    std::unique_lock: 是一个互斥锁包装器,提供了更灵活的锁定和解锁机制。
    std::lock_guard: 是一个简单的RAII(资源获取即初始化)包装器,用于在作用域内自动管理锁的生命周期。

  • 条件变量(Condition Variables)
    std::condition_variable: 允许线程等待某个条件成立。通常与互斥锁一起使用,线程在条件不满足时会阻塞,直到被其他线程通知条件已改变。
    std::condition_variable_any: 是std::condition_variable的泛化版本,可以与任何满足基本锁定要求的类型一起使用。

  • 未来和承诺(Futures and Promises)
    std::future: 表示某个计算的结果,它可能在某个线程中异步计算。
    std::promise 和 std::packaged_task: 用于在某个线程中计算结果,并将其与std::future对象关联,以便在其他线程中检索结果。

  • 原子操作(Atomic Operations)
    C++标准库提供了一系列原子类型(如std::atomic),以及对应的原子操作函数(如std::atomic_flag::test_and_set),用于执行不可分割的操作,这些操作在多线程环境中是安全的。

  • 屏障(Barriers)
    C++标准库没有直接提供 屏障(barrier)的类,但可以通过其他同步原语(如条件变量和互斥锁)来实现屏障的功能。屏障用于同步一组线程,确保它们都到达某个点后再一起继续执行。
    其他工具

  • std:: lock: 一个函数模板,用于同时锁定多个互斥锁,避免死锁。
    std::try_to_lock: 尝试锁定互斥锁,如果锁已被其他线程持有,则立即返回。
    std::adopt_lock 和 std::defer_lock: 是std::unique_lock的构造函数参数,用于控制锁的初始状态。

  • 请注意,C++标准库中的线程同步功能主要关注于通用多线程编程的需求。对于更复杂的同步模式或特定于平台的同步机制,可能需要使用操作系统提供的API或其他第三方库。

Stkcd [股票代码] ShortName [股票简称] Accper [统计截止日期] Typrep [报表类型编码] Indcd [行业代码] Indnme [行业名称] Source [公告来源] F060101B [净利润现金净含量] F060101C [净利润现金净含量TTM] F060201B [营业收入现金含量] F060201C [营业收入现金含量TTM] F060301B [营业收入现金净含量] F060301C [营业收入现金净含量TTM] F060401B [营业利润现金净含量] F060401C [营业利润现金净含量TTM] F060901B [筹资活动债权人现金净流量] F060901C [筹资活动债权人现金净流量TTM] F061001B [筹资活动股东现金净流量] F061001C [筹资活动股东现金净流量TTM] F061201B [折旧摊销] F061201C [折旧摊销TTM] F061301B [公司现金流1] F061302B [公司现金流2] F061301C [公司现金流TTM1] F061302C [公司现金流TTM2] F061401B [股权现金流1] F061402B [股权现金流2] F061401C [股权现金流TTM1] F061402C [股权现金流TTM2] F061501B [公司自由现金流(有)] F061601B [股权自由现金流(有)] F061701B [全部现金回收率] F061801B [营运指数] F061901B [资本支出与折旧摊销比] F062001B [现金适合比率] F062101B [现金再投资比率] F062201B [现金满足投资比率] F062301B [股权自由现金流] F062401B [企业自由现金流] Indcd1 [行业代码1] Indnme1 [行业名称1] 季度数据,所有沪深北上市公司的 分别包含excel、dta数据文件格式及其说明,便于不同软件工具对数据的分析应用 数据来源:基于上市公司年报及公告数据整理,或相关证券交易所、各部委、省、市数据 数据范围:基于沪深北证上市公司 A股(主板、中小企业板、创业板、科创板等)数据整理计算
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值