[C++11 多线程同步] --- 线程同步概述

Posted Overboom

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[C++11 多线程同步] --- 线程同步概述相关的知识,希望对你有一定的参考价值。

1 线程调度的几个基本知识点

多线程并发执行时有很多同学捋不清楚调度的随机性会导致哪些问题,要知道如果访问临界资源不加锁会导致一些突发情况发生甚至死锁。

关于线程调度,需要深刻了解以下几个基础知识点:

  • 调度的最小单位是轻量级进程或者线程;
  • 每个线程都会分配一个时间片,时间片到了就会执行下一个线程;
  • 线程的调度有一定的随机性,无法确定什么时候会调度;
  • 在同一个进程内,创建的所有线程除了线程内部创建的局部资源,进程创建的其他资源所有线程共享; 比如:主线程和子线程都可以访问全局变量,打开的文件描述符等。

2 为什么需要线程同步

假设有 4 个线程 A、B、C、D,当前一个线程 A 对内存中的共享资源进行访问的时候,其他线程 B, C, D 都不可以对这块内存进行操作,直到线程 A 对这块内存访问完毕为止,B,C,D 中的一个才能访问这块内存,剩余的两个需要继续阻塞等待,以此类推,直至所有的线程都对这块内存操作完毕。 线程对内存的这种访问方式就称之为线程同步,通过对概念的介绍,我们可以了解到所谓的同步并不是多个线程同时对内存进行访问,而是按照先后顺序依次进行的

下面看一段代码说明为什么需要线程同步,两个线程对一个共享数据进行++操作并且输出出来,代码如下:

#include <iostream>
#include <thread>
#include <unistd

以上是关于[C++11 多线程同步] --- 线程同步概述的主要内容,如果未能解决你的问题,请参考以下文章

[C++11 多线程同步] --- 线程同步概述

[C++11 多线程同步] --- 条件变量

[C++11 多线程同步] --- 条件变量

[C++11 多线程同步] --- 条件变量

并发编程多线程程序同步策略

[C++11 多线程同步] --- 互斥锁