乘风的小站
  • 首页
  • 归档
  • 标签
  • 关于

C++原子变量

C++11 提供了一个原子类型 std::atomic<T>,通过这个原子类型管理的内部变量就可以称为原子变量,可以给原子类型指定任意的类型作为模板参数,因此原子变量可以是任意的类型。 C++11 内置了整形的原子变量,这样就可以更方便地使用原子变量。在多线程操作中,使用原子变量之后就不需要再使用互斥量来保护该变量,使用起来更简洁。因为对原子变量进行的操作只能是一个原子操作 atomi
2021-08-28
#线程

C++线程同步

线程同步进行多线程编程,如果多个线程需要对同一块内存进行操作,比如:同时读、同时写、同时读写。对于后两种情况来说,如果不做任何的人为干涉就会出现各种各样的错误数据。这是因为线程在运行的时候需要先得到 CPU 时间片,时间片用完之后需要放弃已获得的 CPU 资源,线程频繁地在就绪态和运行态之间切换,更复杂一点还可以在就绪态、运行态、挂起态之间切换,这样就会导致线程的执行顺序并不是有序的,而是随机的、
2021-08-27
#线程

命名空间this_thread

在 C++11 中不仅添加了线程类,还添加了一个关于线程的命名空间 std::this_thread,在这个命名空间中提供了四个公共的成员函数,通过这些成员函数就可以对当前线程进行相关的操作。 get_id()调用命名空间 std::this_thread 中的 get_id() 方法可以得到当前线程的线程 ID,函数原型如下: 1thread::id get_id() noexcept; 示例
2021-08-25
#线程

C++线程

线程C++11 之前,C++ 语言没有对并发编程提供语言级别的支持,在编写可移植的并发程序时存在诸多的不便。现在 C++11 中增加了线程以及线程相关的类,很方便地支持了并发编程,使得编写的多线程程序的可移植性得到了很大的提高。 C++11 中提供的线程类叫做 std::thread,基于这个类创建一个新的线程非常的简单,只需要提供线程函数或者函数对象,并且可以同时指定线程函数的参数。首先了解一下
2021-08-24
#线程

线程同步

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

线程

线程的概念线程是轻量级的进程(LWP:light weight process),在 Linux 环境下线程的本质仍是进程。在计算机上运行的程序是一组指令及指令参数的组合,指令按照既定的逻辑控制计算机运行。操作系统会以进程为单位,分配系统资源。进程是资源分配的最小单位,线程是操作系统调度执行的最小单位。 线程和进程之间的区别:(1)线程是程序的最小执行单位,进程是操作系统中最小的资源分配单位。每个
2021-08-18
#线程

信号

Linux 中的信号是一种消息处理机制,它本质上是一个整数,不同的信号对应不同的值,由于信号的结构简单所以不能携带很大的信息量,但是信号在系统中的优先级是非常高的。 在 Linux 中的很多常规操作中都会有相关的信号产生,先从熟悉的场景说起:(1)通过键盘操作产生了信号用户按下 Ctrl-C,这个键盘输入产生一个硬件中断,使用这个快捷键会产生信号,这个信号会杀死对应的某个进程(2)通过 shell
2021-08-14
#进程

守护进程

守护进程(Daemon Process),是 Linux 中的后台服务进程。它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件,一般采用以 d 结尾的名字。 进程组多个进程的集合就是进程组,这个组中必须有一个组长,组长就是进程组中的第一个进程,组长以外的都是普通的成员。每个进程组都有一个唯一的组 ID,进程组的 ID 和组长的 PID 相同。 进程组中的成
2021-08-13
#进程

共享内存

共享内存不同于内存映射区,它不属于任何进程,并且不受进程生命周期的影响,通过调用 Linux 提供的系统函数可以得到这块共享内存。使用之前需要让进程和共享内存进行关联,得到共享内存的起始地址之后就可以直接进行读写操作;进程也可以和这块共享内存解除关联,解除关联之后就不能操作这块共享内存了。在所有进程间通信的方式中,共享内存的效率是最高的。 共享内存操作默认不阻塞,如果多个进程同时读写共享内存,可能
2021-08-10
#进程

内存映射

创建内存映射区如果要实现进程间通信,可以通过函数创建一块内存映射区,和管道不同的是管道对应的内存空间在内核中,而内存映射区对应的内存空间在进程的用户区(用于加载动态库的那个区域),也就是说进程间通信使用的内存映射区不是一块,而是在每个进程内部都有一块。由于每个进程的地址空间是独立的,各个进程之间也不能直接访问对方的内存映射区,需要通信的进程需要将各自的内存映射区和同一个磁盘文件进行映射,这样进程之
2021-08-08
#进程
1…1213141516…32

搜索

Hexo Fluid
有态度,有坚持~