アプリ版:「スタンプのみでお礼する」機能のリリースについて

C++でマルチスレッド処理のプログラムを作成しています。

std::thread th(program);

のようにthreadクラスを用いてマルチスレッド処理を行おうと思っているのですが、この"th"の部分(多分スレッド名?)をint型の変数の値を用いて指定することは可能でしょうか?

なぜこのようなことを聞くかというと、プログラムに入力された値(個数)分だけのスレッド数を展開したいと考えているからです。

変数の値を用いてスレッド名を指定できれば任意の個数分だけのスレッドの展開が可能だと考えています。

しばらく自分で調べていましたが、一向に見つかる気配が無いのでこの場を借りて質問させていただきました。

もしスレッド名に変数を用いるやり方を知っている方や、入力された個数分だけのスレッド展開をするための別のやり方をご存知の方いらっしゃったら、ご教授願えると幸いです。

A 回答 (3件)

>std::thread th[3](program);


>まだまだクラスを配列で使う方法がまだ分かっていないです。
難しく考える必要は無いです

https://wandbox.org/permlink/O1XwPttIS8XQcXXc

例ではありますが
このように宣言、インスタンス生成を行えば良いです
    • good
    • 1
この回答へのお礼

回答ありがとうございます。

URLの例を拝見させていただきました。
参考にし、

std::thread th[3] でクラスの箱を作り、
th[i] = std::thread(program) で箱に実体(インスタンス)を入れる

のようにしたらうまくできました!

なぜ分けなきゃいけないのか疑問は残りますが、
それはこの先勉強していくとして…

今回、大変勉強になりました。
ご教授ありがとうございました。

お礼日時:2019/03/08 20:55

thはスレッド名ではなくスレッドクラスの変数名です。


変数を配列にすれば複数を整数値で識別できますが、任意個数というなら可変長配列など動的にサイズを変えられるものを使う必要があるでしょう。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
thはクラスの変数名、言われてみればその通りですね。C++勉強中なのですがだんだん分かってきました。

基本的に入力で得られた数字の分スレッドクラスの実体を作りたい訳で、今は動的はいらないのかなと思います。どのようにやるのかは興味がありますが。(calloc,malloc的な何かでやるのかな?)

ただ、よっしゃ配列にすればいいんだと思って

std::thread th[3](program);

のようにやったらコンパイルが通らなかったので、まだまだクラスを配列で定義するやり方がまだいまいち分かっていないです。

お礼日時:2019/03/04 16:44

配列にしてやればいいだけです

    • good
    • 0
この回答へのお礼

回答ありがとうございます。

std::thread th[3](program);
のように配列にしてみましたがまだまだクラスを配列で使う方法がまだ分かっていないです。

お礼日時:2019/03/04 16:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!