使用std::thread循环创建10个线程
时间: 2023-05-13 22:06:17 浏览: 73
可以使用如下代码创建10个线程:
```
#include <iostream>
#include <thread>
void threadFunc(int i) {
std::cout << "Thread " << i << " is running" << std::endl;
}
int main() {
std::thread threads[10];
for (int i = 0; i < 10; i++) {
threads[i] = std::thread(threadFunc, i);
}
for (int i = 0; i < 10; i++) {
threads[i].join();
}
return 0;
}
```
这个程序使用了std::thread库,循环创建了10个线程,并且每个线程都会输出自己的编号。最后,程序会等待所有线程执行完毕后再退出。
相关问题
for循环std::thread创建线程参数赋值怎么实现
可以使用lambda表达式来实现for循环中std::thread的创建和参数赋值。例如:
```c++
#include <iostream>
#include <thread>
#include <vector>
int main() {
std::vector<std::thread> threads;
for (int i = 0; i < 5; ++i) {
threads.emplace_back([i]() {
std::cout << "Thread " << i << " is running." << std::endl;
});
}
for (auto& t : threads) {
t.join();
}
return 0;
}
```
这段代码中,我们使用了一个vector来存储创建的线程,然后使用emplace_back()函数向vector中添加线程。在lambda表达式中,我们将i作为参数传递给线程函数,以便在每个线程中输出不同的线程编号。最后,我们使用join()函数等待所有线程执行完毕。
std::thread 实现线程挂起
std::thread类本身没有提供线程挂起的方法。然而,我们可以通过使用C++11提供的互斥锁和条件变量来实现线程的暂停和恢复。
在实现中,我们可以使用std::mutex和std::condition_variable来确保线程在暂停期间不消耗CPU。通过在线程的主循环中使用互斥锁和条件变量来控制线程的暂停和恢复。
具体的实现步骤如下:
1. 在Thread类中添加一个std::mutex和std::condition_variable成员变量。
2. 在start()方法中创建一个新的std::thread对象,并在该线程中调用run()方法。
3. 在run()方法中,使用一个while循环来控制线程的执行。在每次循环开始之前,使用std::unique_lock<std::mutex>来锁定互斥锁。
4. 在循环的开头使用std::condition_variable的wait()方法来等待条件变量,直到收到恢复线程执行的信号。
5. 在循环中添加一个判断,如果线程被暂停,则继续等待条件变量的信号。
6. 在pause()方法中使用互斥锁来更新暂停标志。
7. 在resume()方法中使用互斥锁来更新暂停标志,并通过条件变量的notify_one()方法发送信号给wait()方法。
8. 在stop()方法中使用互斥锁来更新停止标志,并通过条件变量的notify_one()方法发送信号给wait()方法,以确保线程能够停止。