linux clone线程创建,Linux 中使用 clone 函数来创建线程

本文介绍了Linux中如何使用clone函数创建线程,包括堆栈分配、clone函数的参数解析以及相关标志的含义。示例代码展示了如何创建并运行一个线程,强调了CLONE_THREAD标志的重要性。
摘要由CSDN通过智能技术生成

来源:http://my.oschina.net/sincoder/blog/132303

Linux 上创建线程一般使用的是 pthread 库  实际上 libc 也给我们提供了创建线程的函数 ,那就是 clone

int clone(int (*fn)(void *),

void *child_stack,

int flags,

void *arg, ...

/* pid_t *ptid, struct user_desc *tls, pid_t *ctid */

);

man 手册里面说的很清楚这个函数存在的意义就是实现线程  当然这个函数不是 linux 的系统调用而是对系统调用的封装 。

首先需要给新的线程创建个堆栈 ,使用函数 mmap ,这个函数常用来完成文件映射 ,这里分配内存也是可以的

void *pstack = (void *)mmap(NULL,

STACK_SIZE,

PROT_READ | PROT_WRITE ,

MAP_PRIVATE | MAP_ANONYMOUS | MAP_ANON ,//| MAP_GROWSDOWN ,

-1,

0

);

通过指定  MAP_ANONYMOUS 标识  系统就不会创建文件映射 而仅仅分配内存

注意堆栈不要太小了  不然会溢出的。。。。。。

然后调用 clone 函数

ret = clone(   thread_func,

(void *)((unsigned char *)pstack + STACK_SIZE),

CLONE_VM | CLONE_FS | CLONE_THREAD | CLONE_FILES | CLONE_SIGHAND | SIGCHLD,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值