作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
<分区>
毫无疑问 pthread_create() 调用克隆,但是是否可以修改具有 pthread_join() 的程序?
实际上我正在尝试修改此代码以使用 clone()
#include <stdio.h>
#include <sched.h>
#include <pthread.h>
void *childfun (void *para)
{
sleep(2);
printf("child terminating\n");
}
int main (void)
{
void * stackptr;
pthread_t readthread;
pthread_create(&readthread,NULL,childfun,NULL);
pthread_join(readthread,NULL);
printf("exit\n");
}
首先我混淆了克隆使用哪个标志,然后我观察了上面代码的 strace 输出并将我的主要功能替换为
int main (void)
{
int ctid;
void *stackptr;
stackptr = malloc(getpagesize());
ctid = clone(childfun , stackptr+getpagesize() , CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND| CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID,NULL);
printf("exit\n");
}
但是这里主线程在新线程之前终止。如何实现pthread_join功能?
我是一名优秀的程序员,十分优秀!