"C++11 并发指南之std::thread 详解"
本文主要介绍了 C++11 中的 std::thread 类,它是 C++11 并发指南的重要组件。std::thread 类提供了创建和管理线程的功能,允许开发者在程序中创建多个线程,从而实现并发编程。
我们需要了解 std::thread 类的构造函数。std::thread 类有四种构造函数:
1.默认构造函数,创建一个空的 thread 执行对象。
2.thread(Fn&& fn, Args&&... args):初始化构造函数,创建一个 thread 对象,该 thread 对象可被 joinable,新产生的线程会调用 fn 函数,该函数的参数由 args 给出。
3.拷贝构造函数(被禁用),意味着 thread 不可被拷贝构造。
4-thread(thread&& x) noexcept:move 构造函数,move 构造函数,调用成功之后 x 不代表任何 thread 执行对象。
在使用 std::thread 时,需要包含 <thread> 头文件。std::thread 对象可以在程序中创建多个线程,每个线程可以执行不同的任务。例如:
```cpp
void f1(int n) {
for (int i = 0; i < 5; ++i) {
std::cout << "Thread " << n << " executing\n";
std::this_thread::sleep_for(std::chrono::milliseconds(10));
}
}
int main() {
std::thread t1(f1, 1);
t1.join();
return 0;
}
```
在上面的示例代码中,我们创建了一个线程 t1,它执行了函数 f1,该函数打印出 "Thread 1 executing" 五次,并每次休眠 10 毫秒。然后,我们使用 join() 函数等待线程 t1 完成执行。
在 std::thread 中,我们还可以使用 move 赋值操作,例如:
```cpp
std::thread t1(f1, 1);
std::thread t2 = std::move(t1);
```
在上面的示例代码中,我们创建了一个线程 t1,然后使用 move 赋值操作将其赋值给 t2。这样,t2 将接管 t1 的执行对象,t1 不再是一个线程对象。
此外,std::thread 还提供了一些其他的成员函数,例如 join()、detach()、get_id() 等。join() 函数等待线程完成执行,而 detach() 函数将线程分离,使其在后台执行。get_id() 函数返回线程的唯一标识符。
std::thread 类是 C++11 并发指南的重要组件,它提供了创建和管理线程的功能,允许开发者在程序中创建多个线程,从而实现并发编程。