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: マルチスレッドについて
各スレッドでしたい処理の内容によります。
全てのスレッドでパラメータ(計算の範囲など)を変えただけでほぼ同じ計算をする場合は、
スレッドに渡すパラメータで制御でき、関数は1個ですむと思います。
逆に、全てのスレッドで全く異なる処理をしたい場合は、100個関数を書くのが一番わかりやすく、効率がいいかもしれません。
全てのスレッドでパラメータ(計算の範囲など)を変えただけでほぼ同じ計算をする場合は、
スレッドに渡すパラメータで制御でき、関数は1個ですむと思います。
逆に、全てのスレッドで全く異なる処理をしたい場合は、100個関数を書くのが一番わかりやすく、効率がいいかもしれません。
オフトピック
100スレッドで効率よく計算ができるコンピューター、(少なくとも現在は)かなり高級そうですね…
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: マルチスレッドについて
その必要は無いはずです。テリー さんが書きました:例えば、
for(i=1; i<=100; i++)
{
printf("%d\n",i);
}
この処理を100個のスレッドで実行したい場合は
これを100回書くのですか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
-
テリー
Re: マルチスレッドについて
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes, // セキュリティ記述子
DWORD dwStackSize, // 初期のスタックサイズ
LPTHREAD_START_ROUTINE lpStartAddress, // スレッドの機能
LPVOID lpParameter, // スレッドの引数
DWORD dwCreationFlags, // 作成オプション
LPDWORD lpThreadId // スレッド識別子
);
スレッドの機能のところに同じ関数名を指定して
識別子の部分だけを変えればいいのですか?
LPSECURITY_ATTRIBUTES lpThreadAttributes, // セキュリティ記述子
DWORD dwStackSize, // 初期のスタックサイズ
LPTHREAD_START_ROUTINE lpStartAddress, // スレッドの機能
LPVOID lpParameter, // スレッドの引数
DWORD dwCreationFlags, // 作成オプション
LPDWORD lpThreadId // スレッド識別子
);
スレッドの機能のところに同じ関数名を指定して
識別子の部分だけを変えればいいのですか?
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: マルチスレッドについて
一般論で言うと無闇にスレッドに分割しても処理効率は下がる一方なのでコア数とか同期効率とかを考慮してスレッドを起動するのが普通です。
>スレッドの機能のところに同じ関数名を指定して
>識別子の部分だけを変えればいいのですか?
スレッド識別子の格納先を変えるというならyesです。
>スレッドの機能のところに同じ関数名を指定して
>識別子の部分だけを変えればいいのですか?
スレッド識別子の格納先を変えるというならyesです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。