2012-03-25 39 views
1

と言いますと、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

あなたのコードはマルチスレッドではないので、なぜスレッドセーフに関する質問がありますか? –

+0

私は知っています。 curl_global_initはforkの後に2回呼び出される必要がありますか? – cloudzhou

+0

私はcurl_global_init()を書くことができます。 curl_global_cleanup();必要に応じてすべてのプロセス – cloudzhou

答えて

-2

はい、curl_global_init()

1

curl_global_init一度呼び出されるを呼び出す必要はありません。両方のforkが呼び出された時点でプロセスのコピーを作成するので、curlの状態も複製されることに注意してください。したがって、初期化がフォークの前にすでに行われていた場合は、子でcurl_global_initを再度呼び出す必要はありません。

-1

しかし、子プロセスと親プロセスには違いがあります。子プロセスでcurl_global_initを呼び出すと問題はないと思います。

+0

これは新しい答えではなく既存の回答に対するコメントであるようです回答。 – melpomene

関連する問題