使用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
。是对的吗?
答
是的,有没有必要要求curl_global_init()
答
curl_global_init
被调用一次。请记住,这两个fork在调用时都会创建一个进程的副本,所以它也会复制curl的状态。因此,如果初始化已经在分叉之前完成,则不需要再次在子中调用curl_global_init
。
答
但子进程和父进程有不同的内存空间。我想,如果在子进程调用curl_global_init
+0
这看起来应该是对现有答案的评论,而不是新的回答。 – melpomene 2017-05-11 04:58:42
你的代码是不是多线程的,那么,为什么有关线程安全的问题,没问题吧? – 2012-03-25 11:41:29
我知道。但curl_global_init需要在fork之后调用两次? – cloudzhou 2012-03-25 12:10:19
我可以写curl_global_init();和curl_global_cleanup();如果需要,每个过程 – cloudzhou 2012-03-25 12:11:45