使用std::thread循环创建10个线程
时间: 2023-05-13 20:06:17 浏览: 127
可以使用如下代码创建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个线程,并且每个线程都会输出自己的编号。最后,程序会等待所有线程执行完毕后再退出。
相关问题
std::thread 创建线程终止线程范例代码
在C++中,`std::thread` 是用于创建和管理线程的库的一部分。如果你想创建一个新的线程并能够终止它,你可以这样做:
```cpp
#include <iostream>
#include <thread>
#include <atomic> // 使用原子标志来控制线程的退出
// 定义一个函数作为新线程的任务
void thread_function() {
while (!thread_should_stop) { // 假设thread_should_stop是一个原子标志
std::cout << "Thread is running...\n";
// ... 这里放你要线程执行的具体操作
std::this_thread::sleep_for(std::chrono::seconds(1)); // 线程暂停一段时间
}
std::cout << "Thread stopped by request.\n";
}
int main() {
std::atomic<bool> thread_should_stop(false); // 创建一个共享的布尔标志,用于通知线程停止
// 创建新的线程
std::thread worker(thread_function);
// 等待一段时间...
for (int i = 0; i < 5 && !thread_should_stop.load(); ++i) {
std::cout << "Main thread: waiting for the worker to finish...\n";
std::this_thread::sleep_for(std::chrono::seconds(1));
}
// 如果需要,设置标志告诉线程停止
if (!thread_should_stop.compare_exchange_strong(false, true)) {
std::cout << "Main thread: Thread was already stopping.\n";
}
// 等待线程结束
worker.join();
return 0;
}
```
在这个例子中,我们创建了一个线程`worker`来执行`thread_function`函数。我们使用一个原子标志`thread_should_stop`来控制线程的生命周期。当主线程想要停止工作时,它会改变这个标志的值。线程会在循环检查这个标志,如果变为`true`,就停止运行。
注意,`compare_exchange_strong`函数用于原子地更新标志并检查是否成功,这是为了防止其他线程在我们更改标志的同时修改它。
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()函数等待所有线程执行完毕。
阅读全文