2008-09-11 7 views
43

Cでfork()を使用して別のプロセスを開始しました。新しいスレッドを開始するにはどうすればよいですか?プレーンCでスレッドを開始するにはどうすればよいですか?

+0

プラットフォームによって異なります。 Windowsでこれを行う方法は次のとおりです。[http://msdn.microsoft.com/en-us/library/ms682453.aspx](http://msdn.microsoft.com/en-us/library/ms682453.aspx) –

+0

リンク先のCreateThreadのドキュメントで説明したように、プログラムがCランタイムライブラリを使用する場合は、CreateThreadではなく_beginthreadexを使用する必要があります。 – ChrisN

+0

ありがとう、私はそれに気付かなかった。あなたがCRTを使用しているかどうかをどのように知っていますか?私はすべてがそれを使用すると思った。 –

答えて

50

あなたはfork()について言及して以来、私はあなたがUNIXのようなシステムにいると仮定します。この場合、POSIX threads(通常はpthreadsと呼ばれます)が使いたいものです。

特に、pthread_create()は新しいスレッドを作成するために必要な関数です。引数は次のとおりです。

int pthread_create(pthread_t * thread, pthread_attr_t * attr, void * 
    (*start_routine)(void *), void * arg); 

最初の引数はスレッドIDへの返されたポインタです。 2番目の引数はスレッド引数です。特定の優先順位でスレッドを開始しない限り、NULLにすることができます。 3番目の引数は、スレッドによって実行される関数です。第4引数は、実行時にスレッド関数に渡される単一の引数です。

+8

使用方法の例は次のとおりです。http://timmurphy.org/2010/05/04/pthreads-in-ca-minimal-working-example/ – tremendows

+1

POSIXスレッドは「プレーンC」としてカウントされません。 C11標準はそれを定義していますか? – Hydronium

+0

C11マルチスレッドAPIは、POSIXスレッドの影響を強く受けていますが、同一ではありません。だから、POSIXスレッドが "普通のC"であると私が言っていることは間違いありません。 –

6

pthreadsの良いスタートで、pthread(POSIXスレッド)ライブラリをチェックhere

2

を見て。

12

AFAIKでは、ANSI Cはスレッディングを定義していませんが、利用可能なさまざまなライブラリがあります。

Windowsで実行している場合は、msvcrtにリンクして_beginthreadまたは_beginthreadexを使用してください。

他のプラットフォームで実行している場合は、pthreadsライブラリをチェックしてください(ほかにも同様です)。

8

スレッドはC標準の一部ではないので、スレッドを使用する唯一の方法は、Unix/LinuxではPOSIXスレッド、そのスレッドからCランタイムを使用する場合は_beginthread/_beginthreadexなどのライブラリを使用する方法ですまたはCreateThread Win32 APIのみ)

関連する問題