📜  未知数量的线程 cpp - C++ (1)

📅  最后修改于: 2023-12-03 14:55:26.406000             🧑  作者: Mango

未知数量的线程

在 C++ 中,多线程编程是利用多个线程同时执行程序的技术,使得程序能够更加高效地利用 CPU,实现并发执行任务。在实际编程中,经常会遇到需要创建一些未知数量的线程来执行任务的情况。

创建线程

C++ 中创建线程的方法是使用 std::thread 类来实现:

#include <thread>

void my_function() {
    // 线程要执行的代码
}

std::thread t(my_function); // 创建线程

t.join(); // 程序会等待 t 线程执行完后再继续执行下面的代码

通过传入函数名或可调用对象来创建线程,调用 join() 函数来等待线程执行完毕。

注意:干等线程执行完成的方式显然是十分低效的,我们可以使用 C++ 的 std::future 来获得线程执行结果,而不用干等。

创建未知数量的线程

如果要创建未知数量的线程,可以使用循环语句(如 forwhile)来动态创建线程。

#include <vector>

std::vector<std::thread> threads;

for (int i = 0; i < n; ++i) {
    threads.emplace_back(my_function);
}

for (auto& t : threads) {
    t.join();
}

在上面的代码中,动态创建了 n 个线程,使用 std::vector 来保存线程对象,等待所有线程执行完再继续执行下一步操作。

当然,在实际编写代码时,需要注意线程安全,对于共享资源或临界区,需要使用 C++ 的互斥量(std::mutex)或信号量(std::semaphore)来保证线程安全。

总结

C++ 中创建线程的方法是使用 std::thread 类来实现,通过传入函数名或可调用对象来创建线程,调用 join() 函数等待线程执行完毕。

要创建未知数量的线程,可以使用循环语句(如 forwhile)来动态创建线程。在处理共享资源时,需要使用 C++ 的互斥量或信号量来保证线程安全。