21xrx.com
2024-12-22 22:40:50 Sunday
登录
文章检索 我的文章 写文章
C++多线程编程实战:完整代码分享
2023-07-02 15:18:58 深夜i     --     --
C++ 多线程编程 实战 完整代码 分享

C++是一种强大的编程语言,它高效的执行效率,以及庞大的编程库,使其在各个领域应用广泛。在如今互联网创业的浪潮下,快速的数据处理,以及高并发的用户访问,成为了各大企业和开发者所面对的难题。C++的多线程编程,正是解决这一问题的重要手段。

下面,我们将分享一份完整的C++多线程编程实战代码,帮助各位读者更好的理解C++多线程编程的实现方法。

首先,我们先来看一下代码的基本思路。这份代码主要实现两个功能:

1.实现一个多线程的排序算法:并行地对数列进行排序,大大缩短了算法的执行时间。

2.模拟商城后台服务:模拟一个在线商城的后台服务,实现用户的登录,浏览商品,下单等功能。

当然,以上的两个功能都是只是简单的模拟,读者可以根据实际需求,进行修改和优化。

代码主体如下:


#include <iostream>

#include <thread>

#include <vector>

#include <algorithm>

using namespace std;

//使用快速排序算法对数列进行排序

void quickSort(vector<int>&vec, int start, int end) {

  if (start >= end)

    return;

  

  int mid = vec[start];

  int i = start, j = end;

  while (i < j) {

    while (i < j && mid <= vec[j])

      j--;

    

    vec[i] = vec[j];

    while (i < j && mid >= vec[i]) {

      i++;

    }

    vec[j] = vec[i];

  }

  vec[i] = mid;

  quickSort(vec, start, i - 1);

  quickSort(vec, i + 1, end);

}

//并行地对数列进行排序

void parallelSort(vector<int>&vec, int threadNum) {

  int size = vec.size();

  vector<thread>v;

  for (int i = 0; i < threadNum; i++) {

    v.emplace_back([&vec, i, threadNum, size] {

      int start = i * size / threadNum;

      int end = (i + 1) * size / threadNum - 1;

      quickSort(vec, start, end);

    });

  }

  for (auto&th : v) {

    th.join();

  }

}

//模拟商城后台服务

class MallService {

public:

  void login(string username, string password)

    cout << "login with username:" << username << " and password:" << password << endl;

  

  void browseProduct()

    cout << "browse product" << endl;

  

  void order(string productId, int count)

    cout << "order product with productId:" << productId << " and count:" << count << endl;

  

};

//执行商城操作的线程函数

void runMallThread(MallService&service, int threadIndex) {

  if (threadIndex % 3 == 0) {

    service.login("user1", "password1");

  }

  else if (threadIndex % 3 == 1) {

    service.browseProduct();

  }

  else {

    service.order("product1", 1);

  }

}

//并行地执行商城操作

void parallelRunMall(MallService&service, int threadNum) {

  vector<thread>v;

  for (int i = 0; i < threadNum; i++) {

    v.emplace_back([&service, i] {

      runMallThread(service, i);

    });

  }

  for (auto&th : v) {

    th.join();

  }

}

//主函数

int main() {

  //测试并行排序算法

  vector<int>vec(100000, 0);

  srand((unsigned)time(NULL));

  for (int i = 0; i < vec.size(); i++) {

    vec[i] = rand() % 1000 + 1;

  }

  parallelSort(vec, 4);

  for (int item : vec)

    cout << item << " ";

  

  cout << endl;

  //测试并行商城操作

  MallService service;

  parallelRunMall(service, 10);

  return 0;

}

以上代码主要分为以下三个部分:

1.并行排序算法部分。使用快速排序算法对数列进行排序,并通过线程池进行并行化处理。

2.模拟商城后台服务部分。通过创建不同的线程,模拟后台服务中的用户登录,浏览商品,下单等操作。

3.主函数,主要用于测试上述两个部分的代码。

对于刚刚接触C++多线程编程的同学来讲,这份代码非常适合学习和实践。在本文中,我们简单介绍了C++多线程编程的实现方法,并分享了一份完整的C++多线程编程实战代码。希望读者可以从中有所收获。

  
  

评论区

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