C++ でマルチスレッドを作成する方法はいくつかありますか
C++では、次のような方法でマルチスレッドを作成できます。
- スレッドクラスの std::thread の使用例。std::threadは、C++11 で追加されたスレッドを新規作成するための標準ライブラリのクラスです。そのコンストラクタを使用して、スレッドの開始点として呼び出し可能オブジェクト(関数、関数ポインタ、ラムダ式など)を渡すことができます。
#include <iostream>
#include <thread>
void foo() {
std::cout << "Hello from thread!" << std::endl;
}
int main() {
std::thread t(foo);
t.join(); // 等待线程结束
return 0;
}
- POSIXスレッドライブラリを利用する。POSIXスレッドライブラリは、スレッドの作成や管理を行う標準的なインターフェースです。C++の場合は、pthread_create関数を使用して新しいスレッドを作成できます。
#include <iostream>
#include <pthread.h>
void* foo(void*) {
std::cout << "Hello from thread!" << std::endl;
return nullptr;
}
int main() {
pthread_t thread;
pthread_create(&thread, nullptr, foo, nullptr);
pthread_join(thread, nullptr); // 等待线程结束
return 0;
}
- Windowsスレッドの作成: Windowsシステムでは、CreateThread関数を用いて新しいスレッドを作成することができます。
#include <iostream>
#include <windows.h>
DWORD WINAPI foo(LPVOID) {
std::cout << "Hello from thread!" << std::endl;
return 0;
}
int main() {
HANDLE thread = CreateThread(nullptr, 0, foo, nullptr, 0, nullptr);
WaitForSingleObject(thread, INFINITE); // 等待线程结束
CloseHandle(thread);
return 0;
}
スレッドを作成する手法に関係なく、データ競合やその他の問題を回避するために、スレッドの同期と排他制御に注意してください。