找回密码
 立即注册
首页 业界区 业界 【C++】多线程

【C++】多线程

老僻贞 2026-1-21 21:15:00
前言

实现多线程(win32 API、pthread、std::thread)、线程同步(互斥量、原子变量、读写锁、条件变量、线程局部存储)、如何调试。
多线程

线程:是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
多线程:是多任务处理的一种特殊形式。
一般情况下,两种类型的多任务处理:基于进程和基于线程

  • 基于进程的多任务处理是程序的并发执行。
  • 基于线程的多任务处理是同一程序的片段的并发执行。

    • 并发:多个任务在时间片段内交替执行,表现出同时进行的效果。
    • 并行:多个任务在多个处理器或处理器核上同时执行。

C++ 多线程编程涉及在一个程序中创建和管理多个并发执行的线程。
实现多线程

在C++ 11 新特性中std::thread对linux中的pthread和windows中的Win32 API进行封装,支持跨平台、移动语义等特点,本文主要使用std::thread,对pthread和Thread简单使用。
使用实现

windows下的原生API进行创建线程。

  • 接口
  1. //创建线程
  2. HANDLE CreateThread(
  3.     _In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes,  // 安全属性
  4.     _In_ SIZE_T dwStackSize,                           // 堆栈大小
  5.     _In_ LPTHREAD_START_ROUTINE lpStartAddress,        // 线程函数地址
  6.     _In_opt_ LPVOID lpParameter,                       // 线程参数
  7.     _In_ DWORD dwCreationFlags,                        // 创建标志
  8.     _Out_opt_ LPDWORD lpThreadId                       // 接收线程ID
  9. );
  10. //关闭句柄
  11. CloseHandle(
  12.     _In_ _Post_ptr_invalid_ HANDLE hObject
  13.     );
  14. //待线程结束
  15. //等待事件、信号量等同步对象
  16. DWORD WaitForSingleObject(
  17.     _In_ HANDLE hHandle,        // 要等待的对象句柄
  18.     _In_ DWORD dwMilliseconds   // 超时时间(毫秒)
  19. );
  20. // 使用标志变量让线程自然退出
  21. // 使用事件对象通知线程退出
  22. BOOL TerminateThread(
  23.     _In_ HANDLE hThread,   // 要终止的线程句柄
  24.     _In_ DWORD dwExitCode  // 线程退出码
  25. );
  26. // 检查线程是否仍在运行
  27. // 获取线程的执行结果
  28. // 调试和错误处理
  29. BOOL GetExitCodeThread(
  30.     _In_ HANDLE hThread,         // 线程句柄
  31.     _Out_ LPDWORD lpExitCode     // 接收退出码的指针
  32. );
  33. // 设置当前线程属性(优先级、亲和性等)
  34. // 在线程函数中操作自身
  35. HANDLE GetCurrentThread(VOID);  // 无参数,返回当前线程伪句柄
复制代码

  • 实现
[code]#include #include using namespace std;DWORD WINAPI threadrun(LPVOID lpParamter){    for (int i = 0; i < 10; i++) {        cout

相关推荐

您需要登录后才可以回帖 登录 | 立即注册