TLS(线程局部存储)模拟句柄的实现

2026年(新服务器默认密码)最新各大厂商默认凭证大全 本文整理了国内外主流服务器厂商的默认管理接口凭证信息,包括Dell、HPE、浪潮、华为等品牌的管理接口类型、默认用户名/密码和IP地址。特别强调国产服务器在信创环境下的安全风险,指出国内厂商部分型号仍保留固定默认密码(如浪潮admin/admin),而国际厂商多采用随机密码标签。文章提供了新机初始化安全流程建议:查找机箱标签、立即修改默认密码、配置网络隔离、更新固件等。最后提醒运维人员,服务器安全应从首次上电开始重视,管理接口暴露是重大风险点,必须严格执行安全规范。 阅读详情

这是今天做一个邮件发送模块把一个类包装成Win32 API形式调用时想到的。简单的实现了一下句柄的概念,对于理解内核对象和句柄的概念有一定帮助,看起来还颇像那么回事,呵呵。不过这里的“句柄表”是借助了TLS实现的。

值得一提的是,这个小例子也实现了引用计数的概念,就像线程一样,刚创建时,线程对象的句柄计数是2,因此要CloseHandle一次。下次需要句柄需要重新OpenThread。这里的对象句柄的引用计数也是2,因此刚创建的句柄关掉后,对象不会被删除。当计数递减到1时就删除这个对象。下面是例子的源码:

#include <Windows.h>
#include <stdio.h>
#include <list>
using namespace std;
#pragma warning(disable:4996)
class TEST
{
public:
    TEST(LPCSTR lpName)
    {
        refCount = 2;
        x = 0;
        strcpy(name, lpName);
        printf(“X value is %d \n”, x);
    }
    ~TEST()
    {
        printf(“Destructor \n”);
    }
    void EditX(DWORD value)
    {
        x = value;
    }
public:
    DWORD refCount;
    char name[10];
    DWORD x;
};
list<TEST *> Obj;
HANDLE WINAPI Create(LPCSTR lpName)
{
    DWORD index = TlsAlloc();
    if (index == TLS_OUT_OF_INDEXES)
    {
        return NULL;
    }
    TEST *p = new TEST(lpName);
    Obj.push_back(p);
    if (!TlsSetValue(index, p))
    {
        return NULL;
    }
    return (HANDLE)index;
}
HANDLE WINAPI Open(LPCSTR lpName)
{
    for (list<TEST *>::iterator it = Obj.begin(), end = Obj.end(); it != end; ++it)
    {
        if (0 == strcmp((*it)->name, lpName))
        {
            DWORD index = TlsAlloc();
            if (index == TLS_OUT_OF_INDEXES)
            {
                return NULL;
            }
            if (!TlsSetValue(index, *it))
            {
                return NULL;
            }
            (*it)->refCount++;
            return (HANDLE)index;
        }
    }
    return NULL;
}
BOOL WINAPI Close(HANDLE h)
{
    TEST *p = (TEST *)TlsGetValue((DWORD)h);
    if (--(p->refCount) == 0)
    {
        for (list<TEST *>::iterator it = Obj.begin(), end = Obj.end(); it != end; /*nothing*/)
        {
            if (0 == strcmp((*it)->name, p->name))
            {
                Obj.erase(it++);
            }
            else
            {
                ++it;
            }
        }
        delete p;
    }
    TlsFree((DWORD)h);
    return TRUE;
}
BOOL WINAPI Edit(HANDLE h, DWORD value)
{
    TEST *p = (TEST *)TlsGetValue((DWORD)h);
    if (p == NULL)
    {
        return FALSE;
    }
    p->EditX(value);
    printf(“X value is %d \n”, p->x);
    return TRUE;
}
int main()
{
    HANDLE h = Create(“Gooleer”);
    if (h != NULL)
    {
        Edit(h, 1);
        Close(h);
    }
    Edit(h, 2);
    h = Open(“Gooleer”);
    if (h != NULL)
    {
        Edit(h, 3);
        Close(h);
    }
    return 0;
}


OpenClaw实战一|企业微信AI客服数字员工:自动应答+工单创建+数据统计,零代码3天落地 OpenClaw做企业微信AI客服数字员工,真正的价值不是“能自动回复”,而是把“咨询-应答-工单-统计-复盘”全流程闭环。对中小企业来说,不用招专职AI开发、不用买昂贵客服系统,一台服务器、零代码配置,就能拥有媲美大厂的智能客服能力。 阅读详情

相关推荐

有限差分法地震数据正演模拟(二)

正演模拟,是在地球物理勘探研究中,根据地质体的形状、产状和物性数据,通过构造数学模型计算得到其理论值(数学模拟),或通过构造实体模型来观测模型所产生的地球物理效应的数值(物理模拟)。p(t+1,x,z)即为下一时刻的波长信息,该波动方程的意义就是通过前一时刻(p(t-1,x,z))和现在时刻(p(t,x,z))预测下一时刻波的传播情况。声波波动方程:反应声波的传播规律,描述最简单的波现象的方程,p代表波场信息,v表示速度场信息因为速度只与速度场有关,所以只与x,z有关。其结果也可以作为反演的验证。

weixin_46285501的博客 3936

C++多线程(九)

多线程之线程局部存储 一 线程局部存储 (TLS)       来自:http://msdn2.microsoft.com/en-us/library/ms686749.aspx              同一进程中的所有线程共享相同的虚拟地址空间。不同的线程中的局部变量有不同的副本,但是static和globl变量是同一进程中的所有线程共享的。使用TLS技术可以为static和glo

blogdown的专栏 403

【OpenAirInterface知识-3】OAI端到端部署之5G基站部署

在上一篇文章中已经完成了5G核心网的部署,本篇文章将介绍OAI 5G基站的部署过程。

起名字难上难的博客 3421

C++线程局部存储(TLS)

基本类型(如(unsigned) int,long, char,指针,c类型的结构体等 )可以采用用 __thread修饰符来定义线程局部变量. 示例如下: __thread int i; extern __thread struct state s; static __thread char *p; 像 string 等类是不能直接用 __thread 修符的,只能用其指针类型的.即:

俊哥有个Blog 4586

压电阀控制器设计-总章

本文章用于回顾记录本人制作压电阀控制器的关键技术,本人所制作压电阀控制器已经上市得到应用,特在此对一些关键技术进行回顾记录,欢迎从事压电控制及压电阀相关人员一起讨论

qq_42712859的博客 849

深入解析SDC时钟约束:从create_clock到set_clock_groups的实战指南

本文深入解析SDC时钟约束,从create_clock到set_clock_groups的实战应用,帮助数字芯片设计工程师掌握时序约束的核心技巧。通过详细讲解时钟三要素(波形定义、不确定性和时钟关系)及实战案例,提升时钟约束的精准性和效率,避免常见设计陷阱。

weixin_29274337的博客 1077

TLS--线程局部存储

概念:线程局部存储(Thread Local Storage,TLS)用来将数据与一个正在执行的指定线程关联起来。 进程中的全局变量与函数内定义的静态(static)变量,是各个线程都可以访问的共享变量。在一个线程修改的内存内容,对所有线程都生效。这是一个优点也是一个缺点。说它是优点,线程的数据交换变得非常快捷。说它是缺点,一个线程死掉了,其它线程也性命不保; 多个线程访问共享数据,需要昂贵的同...

weixin_30448603的博客 331

IGBT基础知识

IGBT

u010783226的专栏 1万+

TLS线程局部存储

TLS线程局部存储

megaparsec 1356

泰山派RK3576开发板部署Qwen3-VL-4B多模态模型实战指南:从模型转换到板端推理全流程

本文提供了在泰山派RK3576开发板上部署阿里Qwen3-VL-4B多模态模型的完整实战指南。详细介绍了从环境准备、模型转换(包括视觉模型转换为.rknn格式和语言模型转换为.rkllm格式)、交叉编译到板端推理的全流程,重点讲解了如何利用RK3576的NPU进行硬件加速,实现高效的边缘AI应用。

weixin_30356433的博客 257

通达信量化打板选股指标公式源码副图

X_2:=3*LOW;X_13:=4;X_14:=3;X_15:=2;X_16:=1;

gpzb7的博客 4482

线程局部存储TLS技术之动态TLS

这里说的内容是基于X86的机器上,X64也所差无几。 动态TLS是在程序运行时进行操作的TLS技术。其利用了4个Win32 API来实现。 解释一下什么是动态线程存储: 1. 进程的每个线程都有一张双字的TLS存储槽。实际上是一个数组 2. 在X86的计算机上,该存储槽有64个元素。每个元素都是一个双字 3. 每个线程的同一个索引下的元素可以使用不同的值 4. 该技术可用于解决多线程问题 由于每个线程的TLS存储槽的同一个索引都可以存储不同的内容。那么就可以将其视为一个同步的全局变量来使用

輚至消亡 840

华为昇腾(Ascend)开发考试原题目解析 (2024) (题库一)——HCIP-AI-Ascend Developer——第一部分

给出一段代码如下,以下哪个选项描述错误?...A.中的语句由 MindSpore 接管,有语法限制B. 算子在中定义,并用来建立网络C.__init__()中的语句由 Python 解析执行D. 网络定义必须继承基类nn.Cell正确答案: B__init__()用于定义算子和网络层。所有需要用到的层(如卷积层、全连接层等)都应该在这里进行实例化。这部分代码由Python解释器执行。用于构建前向计算图。它调用在__init__()中定义好的算子和层来描述数据的流向。

qq_38334677的博客 1053

TLS(thread - local storage)线程局部存储

线程局部存储是一个使用很方便的存储线程局部数据的系统。利用TLS机制可以为进程中所有的线程关联若干数据,各个线程通过由TLS分配的全部索引来访问与自己关联的数据。这样,每个线程都可以有线程局部的静态存储数据。   动态使用TLS的典型步骤如下: (1)主线程调用TlsAlloc函数为线程局部存储分配索引,函数原形为: DWORD TlsAlloc( void );//返回一个TLS索引

wl_soft专栏 1724

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【C语言多线程编程核心技巧】:深入理解线程局部存储(TLS)的实现与优化策略

掌握C语言中多线程的线程局部存储,有效解决共享数据冲突问题。适用于高频并发场景,通过__thread关键字实现高效TLS,提升程序性能与安全性。理解原理与优化策略,值得收藏。

LiteCode的博客 910

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

线程局部存储----TLS

线程局部存储的主要优点、实现方式

m0_75006599的博客 487

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

java 线程局部存储,C++采用TLS线程局部存储的用法实例

本文实例讲述了C++采用TLS线程局部存储的用法。分享给大家供大家参考。具体方法如下:// useTLS.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include //声明VOID InitStartTime();DWORD GetUserTime();//TLS索引,作全局变量DWORD g_dwTlsIndex;VOID InitS...

weixin_39548740的博客 117

为什么你的TLS变量初始化失败?一文讲透C语言线程局部存储机制

掌握C语言线程局部存储的初始化技巧,解决多线程编程中TLS变量初始化失败问题。涵盖__thread与pthread_key_t两种实现方式,解析适用场景与性能差异,提升程序并发安全性。一文搞懂机制原理,值得收藏。

BytePulse的博客 1002

Windows 核心编程之线程局部存储

动态TLS(thread local storage)      // 返回一个可以使用的索引标志 失败时返回 TLS_OUT_OF_INDEXES   // 创建的索引与进程相关,多个线程不会使用同一个索引   DWORD TlsAlloc();         //现在往数组里面放值   // 索引是前面创建的,第2个参数放你需要的地址,成功返回 true   BOOL Tl

软件开发 1238

【C语言线程局部存储初始化终极指南】:深入剖析TLS机制与高效初始化技巧

掌握C语言线程局部存储的初始化,解决多线程数据隔离难题。详解TLS机制、__thread与pthread_key_t实现方法,覆盖高性能服务等应用场景,提升程序并发安全性。方法实用,兼容性好,值得收藏。

CodeTrick的博客 758

线程局部存储:TLS(Thread Local Storage)

当时,使用 TLS(Thread Local Storage,线程局部存储)。如图,每个线程在 TLS 中维护独立的数据副本。从 C11 标准开始,C 语言正式引入了关键字(在中提供了宏在此之前,传统 GCC/Clang 使用__thread扩展,MSVC 使用。

fangfanglovezhou的博客 341

【高性能C程序设计必修课】:线程局部存储TLS初始化深度解密

掌握C语言线程局部存储的初始化,提升多线程程序性能。详解__thread与pthread_key_t实现方式,涵盖适用场景、初始化时机与内存安全优势,避免数据竞争。方法实用,值得收藏。

Instrustar的博客 911

线程局部存储技术

Q&A 启动十个线程,如何记录这个10个线程的执行时间?要求能够在线程退出时打印? 很多人直观的想法是用一个全局变量表记录每个线程的执行时间。对于全局变量使用的缺点分析,这里不做讨论,很多地方都有讲解。本文介绍一种线程局部技术在多线程的应用场景。 线程局部存储,英文为Thread Local Storage,缩写为TLS。为什么要有TLS?原因在于,全局变量与函数内定义的静态变量,是各个线程

baidu_27396537的博客 349

【线程局部存储优化终极指南】:揭秘高性能并发编程的底层秘密

掌握线程局部存储的优化技巧,显著提升并发程序性能。本文详解其在高并发场景下的应用、基于TLS的内存隔离机制与性能调优策略,减少锁竞争,提高执行效率。深入底层原理,实战代码解析,值得收藏。

PixelShoal的博客 860

错过这4种线程局部存储优化策略,你的服务端性能永远上不去

掌握线程局部存储的优化策略,显著提升高并发服务性能。适用于Web服务器、数据库连接池等场景,通过减少锁竞争、优化内存访问提高响应速度。详解4种高效实现方法及其优势,错过等于浪费系统资源,值得收藏。

FastCompile的博客 648

线程局部存储深度解析,掌握C语言多线程环境下变量隔离的关键技术

掌握C语言中多线程的线程局部存储,有效解决共享变量冲突问题。适用于高频并发场景,通过__thread关键字实现高效变量隔离,提升程序安全性与性能。原理清晰、用法简洁,值得收藏。

LogicGlow的博客 958
下一篇: 巧用Q盘搭建SVN服务器
Debug哥
博客等级 码龄14年 9粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值