マルチスレッドについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
テリー

マルチスレッドについて

#1

投稿記事 by テリー » 12年前

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回書くのですか?

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: マルチスレッドについて

#2

投稿記事 by みけCAT » 12年前

各スレッドでしたい処理の内容によります。
全てのスレッドでパラメータ(計算の範囲など)を変えただけでほぼ同じ計算をする場合は、
スレッドに渡すパラメータで制御でき、関数は1個ですむと思います。
逆に、全てのスレッドで全く異なる処理をしたい場合は、100個関数を書くのが一番わかりやすく、効率がいいかもしれません。
オフトピック
100スレッドで効率よく計算ができるコンピューター、(少なくとも現在は)かなり高級そうですね…
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: マルチスレッドについて

#3

投稿記事 by みけCAT » 12年前

テリー さんが書きました:例えば、
for(i=1; i<=100; i++)
{
printf("%d\n",i);
}
この処理を100個のスレッドで実行したい場合は
これを100回書くのですか?
その必要は無いはずです。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

テリー

Re: マルチスレッドについて

#4

投稿記事 by テリー » 12年前

HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes, // セキュリティ記述子
DWORD dwStackSize, // 初期のスタックサイズ
LPTHREAD_START_ROUTINE lpStartAddress, // スレッドの機能
LPVOID lpParameter, // スレッドの引数
DWORD dwCreationFlags, // 作成オプション
LPDWORD lpThreadId // スレッド識別子
);

スレッドの機能のところに同じ関数名を指定して
識別子の部分だけを変えればいいのですか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: マルチスレッドについて

#5

投稿記事 by softya(ソフト屋) » 12年前

一般論で言うと無闇にスレッドに分割しても処理効率は下がる一方なのでコア数とか同期効率とかを考慮してスレッドを起動するのが普通です。

>スレッドの機能のところに同じ関数名を指定して
>識別子の部分だけを変えればいいのですか?

スレッド識別子の格納先を変えるというならyesです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

閉鎖

“C言語何でも質問掲示板” へ戻る