windows核心编程-C/C++标准库与多线程

本文探讨了C/C++标准库在多线程环境下的安全性问题,指出VC++扩展库提供了多线程安全的线程创建函数如 `_beginthreadex`,以确保线程调用C/C++库时的安全。同时,文章提到了在C++类中使用非静态成员函数创建线程的方法,以及因线程生命周期与对象生命周期不同可能导致的问题,并建议将线程对象分配到堆上并在线程结束时自行释放。
摘要由CSDN通过智能技术生成

1、由于历史原因,标准C/C++库在开始时并没有正对多线程做考虑(比如使用了一些全局变量),

在VC++中对标准库做了多线程安全扩展

2、要利用这些扩展就需要使用VC++扩展库提供的创建线程函数_beginthread,_beginthradEx等

函数来替代Windows的原始API--CreateThread

3、因为这些创建函数在内部考虑了多线程安全初始化C/C++标准库,使用这些替代函数创建的线程调用

C/C++时将时多线程安全的(比如:利用TLS等特性改进全局变量)

4、如果只是API的话,那么不存在什么问题(GRSLib库是一个基本不使用C/C++标准库的纯API式的库,

最终是否使用了C/C++标准库由调用者子集决定,但是其线程创建还是使用了_beginthreadex函数)

5、但是若需要调用C/C++库函数的话都建议使用扩展的创建函数替代品(建议使用_beginthreadex)


使用C++类非静态成员函数创建线程

1、如果C++类的非晶态成员是__stdcall调用约定的,那么调用次成员函数时,即使this指针也会入栈

2、而CreateThread(包括_beginthread和_beginthreadex)方法都会传递一个线程函数参数

3、利用这一特征可以将this指针传入,并将指向成员函数的指针当作线程入口参数(适当做下函数指针的

强制类型转换)


C++类封装线程的问题

因为线程C++对象和实际代表的生

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值