C++类成员函数在多线程中的一些问题研究

本文探讨了C++类成员函数在内存中的表现,解释了pthread_create()不能直接传成员函数的原因,以及如何在类中使用互斥锁实现线程安全。文章指出,成员函数调用约定导致的参数差异使得直接传成员函数给pthread_create()不可行,而互斥锁作为类成员变量时,需确保其生命周期与对象同步以保持线程安全性。
摘要由CSDN通过智能技术生成

之前只在C语言下,利用pthread搞过一些小demo玩。看实验室并行框架源码时发觉,全是C++风格的多线程,涉及到的pthread_create()为何不能以成员函数作为参数、锁成员变量、线程安全的类各种的问题,这些之前完全没有接触过。特此进行了两天的调研和思考,现在就简单整理一下这两天看过的资料。

由于就真的是光看没练,只是单纯翻了一堆大致原理,可能会有不少纰漏。阅读后觉得有不妥的地方,那很可能就真的是不妥的,笑。

1. C++类成员函数在内存中的摆法

之前转载了一篇文章,文中大致介绍C++类成员函数在内存中是怎么摆的。其实摆法和C语言就没什么区别,函数还是放在代码段,数据则是放在数据段+bss段+栈+堆中。
类成员函数,背后的原理大致上就相当于在函数调用中,自动多加了一个相关结构指针的参数,然后就可以访问到相关结构的成员变量。
多个对象及其成员函数的内存分布:
在这里插入图片描述
大致原理示例代码(当然,实际区别在于调用约定上):

#include <iostream>

using namespace std;

struct testStruct
{
   
    int i;
    char c;
};


void testFunc(testStruct* myThis)
{
   
    cout << "i: " << myThis->i << " c: " << myThis->c 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值