C++で単一オブジェクト内で複数のスレッドを実行する方法を教えてください。
C++では、スレッドライブラリを使用して、オブジェクトで複数のスレッドを実行できます。以下に簡単な例を示します。
#include <iostream>
#include <thread>
class MyObject {
public:
void threadFunc(int id) {
for(int i = 0; i < 5; ++i) {
std::cout << "Thread " << id << " running..." << std::endl;
}
}
};
int main() {
MyObject obj;
std::thread t1(&MyObject::threadFunc, &obj, 1);
std::thread t2(&MyObject::threadFunc, &obj, 2);
t1.join();
t2.join();
return 0;
}
上の例では、MyObjectクラスにはマルチスレッド内で動作するメンバ関数threadFuncがあります。std::threadクラスを使用して2つのスレッドt1とt2を作成し、それぞれMyObjectオブジェクトのthreadFunc関数を呼び出しながら異なる引数を渡しています。&objをstd::threadコンストラクタの最初の引数として渡すことで、スレッドが呼び出すのはMyObjectオブジェクトのメンバ関数であることを伝えます。最後に、t1.join()とt2.join()を使用して2つのスレッドの実行が完了するのを待ちます。
複数スレッドが同じオブジェクトのメンバ関数を同時にアクセスする場合は、競合状態やデータ競争の問題が発生する可能性があります。このような場合は、ミューテックス(std::mutex)などの同期機構を使用して、スレッドセーフを確保する必要があります。