gpt4 book ai didi

c - 将 fork() 替换为 pthread_create()

转载 作者:太空宇宙 更新时间:2023-11-04 01:12:31 30 4
gpt4 key购买 nike

有人可以告诉我如何替换这个简单的代码以使用 pthread_create 而不是 fork() 吗?这可能吗?特别是,我对传递给 main() 的结构 *ex 有一些问题。我该如何更改它?

int k=0;
pthread_mutex_t mutex= PTHREAD_MUTEX_INITIALIZER;

struct primi{
int s;
int temp;};
struct example{
int c;
struct primi primissimi;};

//handler atfork()
void prepare(void){
pthread_mutex_lock(&mutex);}
void parent(void){
pthread_mutex_unlock(&mutex);}
void child(void){
pthread_mutex_unlock(&mutex); }


void *funzione_thread(void* args){
pthread_mutex_lock(&mutex);
struct example *exthread = args;
struct example locale = *exthread;
locale.primissimi.s++;
pthread_mutex_unlock(&mutex);
//do something
pthread_exit(NULL);
}

int ffork(struct example *extmp){
pthread_t id[5];
int i;
while(k<3){
k++;
pthread_create(&id[k],NULL,funzione_thread,extmp);
}
for(i=1;i<=3;i++){
pthread_join( id[i] ,NULL );
printf("waited thread %d\n",i);
}
printf("threads completed\n");
return 1;
}

int main(int argc, char** argv){
struct example *ex = malloc(sizeof(*ex));
int pid,tmp,err;
if ((err = pthread_atfork(prepare, parent, child)) != 0){
printf("can't install fork handlers");
exit(-1);}
pid=fork();
if(pid==0){
ex->c=1;
ex->primissimi.s=1;
if((tmp=ffork(ex))!=1){
printf("error ffork\n");
exit(0);
}
else{printf("ok ffork\n");
pthread_exit (NULL);
}
}

else{
sleep(10);
}
return 1;
}

最佳答案

fork() 创建一个新进程,
pthread_create() 生成一个新线程,这两个函数做的事情截然不同。进程和线程是不同的。
您确定要实现什么目标吗?

关于c - 将 fork() 替换为 pthread_create(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9090868/

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