当前位置:   article > 正文

C++多线程几种方法_c++多线程实现的四种方式

c++多线程实现的四种方式

在 Windows 平台上,C++ 可以使用多种方法来实现多线程编程。以下是一些常见的方法:

1. Win32 API 线程

        使用 Win32 API 创建线程,这涉及到 `CreateThread` 函数。这种方法较为底层,提供了更多的控制,但也需要更多的代码和手动管理。

  1. #include <windows.h>
  2.    // 线程函数
  3.    DWORD WINAPI ThreadFunction(LPVOID lpParam) {
  4.        // 线程要执行的代码
  5.        return 0;
  6.    }
  7.    int main() {
  8.        // 创建线程
  9.        HANDLE hThread = CreateThread(NULL, 0, ThreadFunction, NULL, 0, NULL);
  10.        if (hThread) {
  11.          // 等待线程结束
  12.          WaitForSingleObject(hThread, INFINITE);
  13.          CloseHandle(hThread);
  14.        }
  15.        return 0;
  16.    }
  1. #include <windows.h>
  2. DWORD WINAPI ThreadFunction(LPVOID lpParam) {
  3. int* param = static_cast<int*>(lpParam);
  4. // 使用 param 中的值
  5. return 0;
  6. }
  7. int main() {
  8. int myParam = 10;
  9. // 创建线程,并将参数的地址传递给线程函数
  10. HANDLE hThread = CreateThread(NULL, 0, ThreadFunction, &myParam, 0, NULL);
  11. if (hThread) {
  12. WaitForSingleObject(hThread, INFINITE);
  13. CloseHandle(hThread);
  14. }
  15. return 0;
  16. }

2. C++11 `<thread>` 标准库

        C++11 引入了线程库,它提供了一个更高级别的抽象来创建和管理线程。使用 `std::thread` 类可以简化线程的创建和同步。

  1.  #include <iostream>
  2.    #include <thread>
  3.    void ThreadFunction() {
  4.        std::cout << "Thread is running" << std::endl;
  5.    }
  6.    int main() {
  7.        std::thread t(ThreadFunction);
  8.        t.join(); // 等待线程结束
  9.        return 0;
  10.    }
  1. #include <iostream>
  2. #include <thread>
  3. void ThreadFunction(int param) {
  4. std::cout << "Parameter in thread: " << param << std::endl;
  5. }
  6. int main() {
  7. int myParam = 10;
  8. std::thread t(ThreadFunction, myParam);
  9. t.join();
  10. return 0;
  11. }

如果参数较多或者需要传递复杂对象,你可以创建一个结构体或类实例来封装这些参数

  1. #include <iostream>
  2. #include <thread>
  3. struct ThreadArgs {
  4. int param1;
  5. double param2;
  6. // 可以添加更多的参数
  7. };
  8. void ThreadFunction(ThreadArgs args) {
  9. std::cout << "Parameter 1 in thread: " << args.param1 << std::endl;
  10. std::cout << "Parameter 2 in thread: " << args.param2 << std::endl;
  11. }
  12. int main() {
  13. ThreadArgs args{10, 3.14};
  14. std::thread t(ThreadFunction, args);
  15. t.join();
  16. return 0;
  17. }

3. _beginthreadex

        这是 Microsoft 提供的一个特定函数,用于在旧版本的 Visual C++ 中创建线程。它是一个较老的接口,与 `CreateThread` 类似,但在使用上略有不同。

  1.  #include <windows.h>
  2.    unsigned int __stdcall ThreadFunction(void*) {
  3.        // 线程要执行的代码
  4.        return 0;
  5.    }
  6.    int main() {
  7.        // 创建线程
  8.        unsigned int threadID;
  9.        HANDLE hThread = (HANDLE)_beginthreadex(NULL, 0, ThreadFunction, NULL, 0, &threadID);
  10.        if (hThread) {
  11.          // 等待线程结束
  12.          WaitForSingleObject(hThread, INFINITE);
  13.          CloseHandle(hThread);
  14.        }
  15.        return 0;
  16.    }
  1. #include <windows.h>
  2. unsigned int __stdcall ThreadFunction(void* lpParam) {
  3. int* param = static_cast<int*>(lpParam);
  4. // 使用 param 中的值
  5. return 0;
  6. }
  7. int main() {
  8. int myParam = 10;
  9. // 创建线程,并将参数的地址传递给线程函数
  10. unsigned int threadID;
  11. HANDLE hThread = (HANDLE)_beginthreadex(NULL, 0, ThreadFunction, &myParam, 0, &threadID);
  12. if (hThread) {
  13. WaitForSingleObject(hThread, INFINITE);
  14. CloseHandle(hThread);
  15. }
  16. return 0;
  17. }

4. 纤程(Fibers)

        Windows 还提供了一种称为纤程的轻量级执行单元,它允许在同一个线程内进行类似线程的切换。纤程通过 `ConvertThreadToFiber` 和 `SwitchToFiber` 等函数进行管理。

5. 异步编程(Asynchronous Programming)

        使用 C++ 的异步编程模型,如 `std::async` 和 `std::future`,可以在不创建线程的情况下实现并发执行。

6. 并行模式库(Parallel Patterns Library, PPL)

        对于使用 Visual Studio 的开发者,PPL 提供了一组用于并行编程的高级抽象,例如 `concurrency::parallel_for` 和 `concurrency::task_group`。

7. Intel Threading Building Blocks (TBB)

        TBB 是一个高性能的并行编程库,它提供了任务并行、并行算法等高级抽象。

8. OpenMP

        OpenMP 是一种用于共享内存并行编程的 API,它通过编译时指令或运行时库函数来实现多线程。

        C++11 的 `<thread>` 库提供了一个现代、便携且易于使用的方式来编写多线程程序,但在某些需要更细粒度控制的场景下,Win32 API 或其他方法可能更合适。

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号