21xrx.com
2025-03-27 16:54:48 Thursday
文章检索 我的文章 写文章
C++多线程编程实战代码示例
2023-07-04 11:30:10 深夜i     7     0
C++编程 多线程 实战 代码示例 并发编程

C++ 多线程编程是高级程序员需要掌握的技能之一。在现代的计算机领域中,很常见同时执行多个任务的需求。所以,多线程编程技能的掌握对于程序员来说非常重要。在本文中,我们将为您提供一些 C++ 多线程编程实战代码示例。

1. 简单的线程创建

在 C++中,创建一个新的线程非常简单,只需要使用 std::thread 对象即可。下面是一段简单的创建新线程并输出的代码:

#include <iostream>
#include <thread>
using namespace std;
void threadFunction()
 cout << "Hello from thread!" << endl;
int main() {
 cout << "Hello from main thread!" << endl;
 // 创建一个新线程并调用 threadFunction
 thread t(threadFunction);
 // 等待线程结束
 t.join();
 return 0;
}

在上述代码中,我们创建了一个名为 threadFunction 的函数,用于在线程中执行。接着,我们在主线程中创建了一个新线程,并将 threadFunction 函数传递给它。最后,我们使用 t.join() 来等待线程的结束。

2. 线程同步

线程同步是多线程编程中的重要概念。如果不恰当地处理线程同步问题,程序可能会产生无法预知的错误。下面是一段简单的代码示例,演示了如何使用互斥锁和条件变量来进行线程同步。

#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
using namespace std;
mutex m;
condition_variable cv;
bool ready = false;
void workerThread() {
 // 等待信号
 unique_lock<mutex> lock(m);
 while (!ready) {
  cv.wait(lock);
 }
 // 执行任务
 cout << "Hello from worker thread!" << endl;
}
int main() {
 // 创建新线程
 thread t(workerThread);
 // 准备任务
 {
  lock_guard<mutex> lock(m);
  ready = true;
 }
 cv.notify_one(); // 发送信号
 // 等待线程结束
 t.join();
 return 0;
}

在这个例子中,我们创建了一个名为 workerThread 的线程。这个线程会等待一个信号,一旦收到信号,它会执行任务并输出一条信息。在主线程中,我们使用互斥锁和条件变量来传递信号,通知 workerThread 线程可以开始执行任务了。

3. 多线程计算

并行计算是多线程编程中常见和实用的技术。下面是一段简单的示例代码,演示如何使用多个线程来进行计算。

#include <iostream>
#include <thread>
#include <vector>
using namespace std;
void calculate(int start, int end, vector<int>& vec) {
 for (int i = start; i <= end; i++) {
  vec[i] = i * i;
 }
}
int main() {
 const int N = 1000000; // 待计算数组的大小
 vector<int> vec(N);
 // 创建10个线程并分配任务
 vector<thread> threads;
 int step = N / 10;
 for (int i = 0; i < 10; i++) {
  int start = i * step;
  int end = start + step - 1;
  threads.push_back(thread(calculate, start, end, ref(vec)));
 }
 // 等待所有线程结束
 for (auto& t : threads) {
  t.join();
 }
 return 0;
}

在这个例子中,我们创建了一个名为 calculate 的函数,用于进行计算。接着,我们创建了10个线程,并将待计算数组分割成10份分配给它们。最后,我们使用 t.join() 等待所有线程的结束,然后可以继续对数组进行后续的操作。

总结

以上几个 C++ 多线程编程实战代码示例,只是冰山一角。在实际开发中,还有很多需要掌握。使用和学习多线程编程技能可以帮助程序员更好的利用系统资源,使程序更加高效。

  
  

评论区

请求出错了