2010-12-05 4 views
3

私は、1つのスレッドアプリケーションで、SDLがまだ初期化時にいくつかのスレッドを生成していることに気付きました。私が気付いたのは、通常、私の気にかかっていないことです.cURLは、スレッド安全のためにスレッドを作成する前に初期化を行う必要があります。彼らは一般的に無視することができます[cURLの初期化のために]かどうか? [また、彼らは外部ライブラリなどの使用の兆候ですか?]デバッガがSDLが初期化時に起動すると報告するスレッドは何ですか?

答えて

1

ソースをグレープすると、オーディオサブシステムはほとんどのプラットフォームでスレッドを利用できるように見えますが、一部のプラットフォーム(ほとんどの場合はX11そうみたいです)。

1

のcURLを使用すると、任意のスレッドを作成した場合(だけでなく、すでに作成したものを内破ますそれは宇宙を意味するものではありません

スレッドの安全性のための任意のスレッドを作成する前に行われるために、その初期化が必要プロセスを開始することによって)初期化することができます。これは、初期化の前にcURLルーチンを呼び出す複数のスレッドを持つことができないことを意味します(同期プリミティブなどを作成する必要があるためです)。

SDLはどの時点でもcURLを呼び出さないため、この場合は初期化の順序は関係ありません。

+1

問題は「この関数はスレッドセーフではありません。プログラム内の他のスレッド(つまり同じメモリを共有するスレッド)が実行されているときには呼び出さないでください。 libcurl。curl_global_init()は同様にスレッドが安全でない他のライブラリの関数を呼び出すため、これらの他のライブラリを使用する他のスレッドと競合する可能性があります。 "curl_global_init doc。 –

+0

@Lela:これはうまくいけば、カールの部分でちょうど過度のパラノイアです。もし彼らが初期化中にステートフル/リエントラントではないlibc関数( 'strtok'?)を掘り起こすような馬鹿げたことを本当に行うなら、私はライブラリにバグがいっぱいあり、それを使わないと思います。 –

+0

cURLは現時点でオープンソースの世界のダウンロードライブラリのデファクトスタンダードです。 –

関連する問題