21xrx.com
2024-09-19 09:34:47 Thursday
登录
文章检索 我的文章 写文章
C++多线程编程实战代码示例
2023-07-04 11:30:10 深夜i     --     --
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++ 多线程编程实战代码示例,只是冰山一角。在实际开发中,还有很多需要掌握。使用和学习多线程编程技能可以帮助程序员更好的利用系统资源,使程序更加高效。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复