码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • C++11 thread_local关键字


    这是一篇科普文--关于thread_local关键字

    首先,C++11之前并没有对并发进行任何的支持,C++11首次提供了以下的支持:

    • 语言核心定义了一个内存模型,保证当更改"被两个不同线程使用"的两个object时,他们彼此独立,而引用thread_local关键字
    • 标准库支持启动多线程,包括传递参数、返回数值、跨线程边界传递异常、同步化等,使得控制流程和数据访问同步成为可能。

    本节仅对thread_local进行学习


    ------不华丽的分割线------


    抛个砖

    如果一个线程挂起或两个线程试图同时访问同一项数据,结果将如何?

    引个玉

    为了解决并行性问题,C++定义了一个支持线程化执行的内存模型,添加了关键字thread_local,提供了相关的库支持。
    关键字thread_local将变量声明为静态存储,其持续性与特定线程相关:即定义这种变量的线程过期时,变量也将过期。

    使用举例:
    例子来源C++11&14 Thread_local
    C++11中就提出了thread_local这个变量修饰,用于解决线程没有自己全局变量的问题。

    #include 
    #include 
    
    thread_local int i = 0;
    
    int func(int val)
    {
            i = val;
            i = i + 2;
            std::cout<int func2()
    {
            std::cout<int main()
    {
            i = 9;
            std::thread t1(func, 1);
            std::thread t2(func, 2);
            std::thread t3(func, 3);
            std::thread t4(func2);
    
            t1.join();
            t2.join();
            t3.join();
            t4.join();
    
            std::cout<return 0;
    }
    

    运行结果:
    image

    使用thread_local修饰符在全局声明了一个i变量,i变量将被每个新建线程拷贝作为其域内的全局变量
    线程1中的i变量和main中的i变量指向不同的地址
    thread_local修饰后仍然是一个变量,依旧能够使用取地址操作或通过引用的方法传递给其他线程

  • 相关阅读:
    手把手设计C语言版循环队列(力扣622:设计循环队列)
    一到汇报思绪乱? 学会这4个模型,高效表达无废话
    Java笔记(七)
    开源数据库MySQL 8.0 OCP认证精讲视频、环境和题库 之三 选项、变量
    前端基础之CSS
    如何化解35岁危机?华为云数据库首席架构师20年技术经验分享
    华硕主板开启核显
    【Java 进阶篇】MySQL启动与关闭、目录结构以及 SQL 相关概念
    C++中悬垂指针(delete后指针)仍然可以访问所指内存的问题
    CYGWIN WARNING: Couldn‘t compute FAST__CWD
  • 原文地址:https://www.cnblogs.com/whiteBear/p/17190241.html
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号