こんにちは、私はC++でマルチスレッド化するのが初めてです。私は別のスレッドで関数を実行するためにC++ 11で利用可能なスレッドクラスを使用していますが、何とか関数から取得している出力は非常に扱いにくいです。これは、異なるスレッドが同じ変数を同時に実行しようとしている可能性があり、競合を引き起こす可能性があるからです。正しい出力が得られるようにコードを修正する方法を提案してください。私は何をしようとしているのかのサンプルコードを投稿しています。これは元のコードではありませんが、元のコードが長すぎて投稿できないため、元のコードの流れが表示されますが、問題は同じです。別のスレッドで実行されている関数が奇妙な出力を生成する
#include<iostream>
#include<thread>
using namespace std;
typedef struct {
int thread_id;
char *message;
}threadData;
int display(threadData *tData){
threadData *my_data;
my_data = (threadData *) tData;
cout << "Thread ID: " << my_data -> thread_id << endl;
cout << "Message: " << my_data -> message << endl;
return 0;
}
int main(){
threadData *data;
data = (threadData *)malloc(sizeof(threadData));
data->thread_id = 12;
data->message = "This is the message";
for (int i = 0; i<10; i++)
{
std::thread t1(display, data);
t1.detach();
}
return 0;
}
出力:スレッドとして
Thread ID: 12
Message: This is the messageThread ID:
12
Message: This is the message
Thread ID: 12
Message: This is the message
Thread ID: 12
Message: This is the message
Thread ID: 12
Message: This is the message
ロックとメモリモデルについて読んでみたいです。真剣に:これは非常に広いトピックです。あなたは "例で"行くべきではありません。しかし、 "概念によって"。意味:その話題に関する研究をする。たとえば、ネットで "C++スレッドロックの例"を検索することによって実行できます。私が意味することは:はい、人々があなたにものを説明するときはうれしいです。しかし、このようなものは何百倍も記録されています。この質問を書くよりも、あなた自身がネットを検索する時間が少なくて済みます**。注意してください:これはまだ有効な質問ですので、downvoteまたはクローズ投票はありませんが、まだ... – GhostCat
実際に、ロックと一般的なスレッドの概念について読むことができます。また、 'malloc'と' C++ '? 'typedef struct'?あなたはC++を少しでも元気にしたいかもしれません。 –