使用curl进行多进程,何时必须调用curl_global_init?

问题描述:

正如http://curl.haxx.se/libcurl/c/curl_global_init.html说,curl_global_init()是必要的,但这个功能不是线程安全的。如下面的代码:使用curl进行多进程,何时必须调用curl_global_init?

// main process 
curl_global_init(); // 1 curl_global_init 
pid = fork(); 
if (pid == 0) { 
    // Child process 
    curl_global_init(); // 2 curl_global_init 
    // ... curl functions 
} else { 
    // parent process 
    // ... curl functions 
} 

难道孩子过程中需要再次调用curl_global_init? 我认为子进程会从父进程复制内存空间,并且不需要再次调用curl_global_init。是对的吗?

+1

你的代码是不是多线程的,那么,为什么有关线程安全的问题,没问题吧? – 2012-03-25 11:41:29

+0

我知道。但curl_global_init需要在fork之后调用两次? – cloudzhou 2012-03-25 12:10:19

+0

我可以写curl_global_init();和curl_global_cleanup();如果需要,每个过程 – cloudzhou 2012-03-25 12:11:45

是的,有没有必要要求curl_global_init()

curl_global_init被调用一次。请记住,这两个fork在调用时都会创建一个进程的副本,所以它也会复制curl的状态。因此,如果初始化已经在分叉之前完成,则不需要再次在子中调用curl_global_init

但子进程和父进程有不同的内存空间。我想,如果在子进程调用curl_global_init

+0

这看起来应该是对现有答案的评论,而不是新的回答。 – melpomene 2017-05-11 04:58:42