ページ 1 / 1
マルチスレッドについて
Posted: 2013年12月30日(月) 23:25
by テリー
http://www.kumei.ne.jp/c_lang/intro2/no_101.htm
このサイトを見ながら勉強しています。
このサンプルでは、スレッド0から2と3つのスレッドを作成していますが、
一つのスレッド毎に関数を用意しています。
極端な話し、100個スレッドが欲しい場合は100個の関数を作成しなければならないのですか?
例えば、
for(i=1; i<=100; i++)
{
printf("%d\n",i);
}
この処理を100個のスレッドで実行したい場合は
これを100回書くのですか?
Re: マルチスレッドについて
Posted: 2013年12月30日(月) 23:37
by みけCAT
各スレッドでしたい処理の内容によります。
全てのスレッドでパラメータ(計算の範囲など)を変えただけでほぼ同じ計算をする場合は、
スレッドに渡すパラメータで制御でき、関数は1個ですむと思います。
逆に、全てのスレッドで全く異なる処理をしたい場合は、100個関数を書くのが一番わかりやすく、効率がいいかもしれません。
オフトピック
100スレッドで効率よく計算ができるコンピューター、(少なくとも現在は)かなり高級そうですね…
Re: マルチスレッドについて
Posted: 2013年12月30日(月) 23:38
by みけCAT
テリー さんが書きました:例えば、
for(i=1; i<=100; i++)
{
printf("%d\n",i);
}
この処理を100個のスレッドで実行したい場合は
これを100回書くのですか?
その必要は無いはずです。
Re: マルチスレッドについて
Posted: 2013年12月30日(月) 23:49
by テリー
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes, // セキュリティ記述子
DWORD dwStackSize, // 初期のスタックサイズ
LPTHREAD_START_ROUTINE lpStartAddress, // スレッドの機能
LPVOID lpParameter, // スレッドの引数
DWORD dwCreationFlags, // 作成オプション
LPDWORD lpThreadId // スレッド識別子
);
スレッドの機能のところに同じ関数名を指定して
識別子の部分だけを変えればいいのですか?
Re: マルチスレッドについて
Posted: 2013年12月30日(月) 23:55
by softya(ソフト屋)
一般論で言うと無闇にスレッドに分割しても処理効率は下がる一方なのでコア数とか同期効率とかを考慮してスレッドを起動するのが普通です。
>スレッドの機能のところに同じ関数名を指定して
>識別子の部分だけを変えればいいのですか?
スレッド識別子の格納先を変えるというならyesです。