之前只在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

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

被折叠的 条评论
为什么被折叠?



