gpt4 book ai didi

c - 如何用 clone() 替换 pthread_join() 和 pthread_create()

转载 作者:太空狗 更新时间:2023-10-29 11:14:14 24 4
gpt4 key购买 nike

<分区>

毫无疑问 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功能?

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com