C++ 多线程 -- 线程同步

线程是程序执行中一个单一的顺序控制流程,是程序执行流的最小单元,是处理器调度和分派的基本单位。一个进程可以有一个或多个线程,各个线程之间共享程序的内存空间(也就是所在进程的内存空间)。一个标准的线程由线程ID、当前指令指针(PC)、寄存器和堆栈组成。它是进程的一个执行单元,是进程内科调度实体。比进程更小的独立运行的基本单位。线程也被称为轻量级进程。

线程同步的几种方式

线程同步是指多线程通过特定的设置(如互斥量,事件对象,临界区,信号量)来控制线程之间的执行顺序(即所谓的同步)也可以说是在线程之间通过同步建立起执行顺序的关系

CreateThread()        创建一个新线程

ExitThread()          正常结束一个线程的执行

TerminateThead()      强制终止一个线程的执行

ResumeThread()        重启一个线程

SuspendThread()       挂起一个线程

GetExiCodeThread()    得到一个线程的退出码

GetThreadPriority()   得到一个线程的优先级

SetThreadPriority()   设置一个线程的优先级

CloseHandle()         关闭一个线程的句柄

CreateRemoteThread()  再另一个进程中创建一个新线程

PostThreadMessage()   发送一条消息给指定的线程

GetCurrentThread()    得到当前的线程句柄

GetCurrentThreadId()  得到当前线程的ID

GetThreadId()         得到指定线程的ID

WaitForSingleObject() 等待单个对象

WaitForMultipleObjects()等待多个对象
临界区(Critical section)

临界区(Critical Section)是一段独占对某些共享资源访问的代码,在任意时刻只允许一个线程对共享资源进行访问。如果有多个线程试图同时访问临界区,那么在有一个线程进入后其他所有试图访问此临界区的线程将被挂起,并一直持续到进入临界区的线程离开。临界区在被释放后,其他线程可以继续抢占,并以此达到用原子方式操作共享资源的目的。
临界区在使用时以CRITICAL_SECTION结构对象保护共享资源,并分别用EnterCriticalSection()LeaveCriticalSection() 函数去标识和释放一个临界区。所用到的CRITICAL_SECTION结构对象必须经过InitializeCriticalSection()的初始化后才能使用,而且必须确保所有线程中的任何试图访问此共享资源的代码都处在此临界区的保护之下。否则临界区将不会起到应有的作用,共享资源依然有被破坏的可能。

  • 互斥量(mutex): 采用互斥对象机制,只有拥有互斥对象的线程才有访问公共资源的权限。因为互斥对象只有一个,所以可以保证公共资源不会被多个线程同时访问。
  • 信号量(semaphore): 它允许同一时刻多个线程访问同一资源,但是需要控制同一时刻访问此资源的最大线程数量。
  • 事件(Event): 通过通知操作的方式来保持多线程同步,还可以方便的实现多线程优先级的比较操作。

你可能感兴趣的:(c++,多线程)