各位看官们,大家好,上一回中咱们说的是“创建进程时的内存细节”的例子,这一回咱们说的例子是:创建线程时的内存细节。闲话休提,言归正转。让我们一起talk C栗子吧!
看官们,我们在前面章回中介绍过创建线程的例子,创建线程时使用的函数是pthread_create。今天我们一起说一下使用该函数创建线程时内存的一些细节问题。我们介绍的的重点还是内存布局中的四个分区。这点和前一回中介绍创建进程时内存细节的思路相同。
- 1.在主线程中使用pthread_create函数可以创建一个新线程,我们叫它子线程,主线程可以创建多个子线程;
- 2.子线程拥有自己的栈区,栈区的内容属于自己,不能被其它子线程,甚至是主线程使用;
- 3.子线程没有自己的代码区,数据区和堆区,而是和主线程一起共用这些区域;
- 4.子线程运行时执行单独的线程函数,该函数是在创建线程时设定的;
最后,我们说一下pthread_create函数,在Linux中该函数是通过clone来创建线程的,子线程之所以能拥有自己的栈区,并且和主线程共享代码区,数据区和堆区受益于clone函数,下面是clone函数的函数原型,请大家参考:
int clone(int (*fn)(void *), void *child_stack,
int flags, void *arg, ...
/* pid_t *ptid, struct user_desc *tls, pid_t *ctid */ );
从上面的函数原型中可以看到,参数fn就是用来设定线程执行函数的,参数child_stack就是用来创建子线程的栈区的。内存中的其它区域与参数flags和arg有关,我们就不做详细介绍了。
各位看官,关于“创建线程时的内存细节”的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解 。