为什么需要内存模型
开发者编写的代码和最终运行的程序往往会存在较大的差异,而运行结果与开发者预想一致,只是一种假象,之所以会产生差异,原因主要由于:
  编译器优化导致的指令重排序
  CPU乱序执行
  CPU Cache不一致性
关于CPU Cache不一致性:
现代的主流CPU几乎都会包含多个核以及...
    阅读更多
 
    
    
    C++11引入了std::future和std::promise,为异步编程提供了更结构化的工具。
  通过std::async或std::packaged_task启动异步任务。
  通过std::promise则用于设置异步操作的结果。
  通过std::future获取异步操作的结果。
异步任务的结果...
    阅读更多
 
    
    
    条件变量是一种同步机制,用于多线程编程中,当某个条件不满足时,使线程阻塞,并在条件满足时被唤醒。通常与互斥锁一起使用,以确保对共享资源的互斥访问和防止竞态条件。
condition_variable
构造函数
  只支持默认构造;
  不支持拷贝构造和移动构造。
成员函数
  wait:阻塞当前线程,...
    阅读更多
 
    
    
    进程和程序
  程序:储存在外部存储的一个可执行文件。
  进程:在内存中运行,处于执行期间的程序。
进程和线程
  进程:是操作系统资源分配的基本单位,进程之间的地址空间和资源相互独立,一个进程至少有一个线程。
  线程:是处理器任务调度和执行的基本单位,同一进程的所有线程共享本进程的地址空间和资源。
...
    阅读更多
 
    
    
    互斥锁
std::mutex
C++里面的mutex类是用来进行线程同步,保护数据的,防止不同线程对同一数据同时进行处理。
std::mutex的成员函数:
  构造函数,std::mutex不允许拷贝构造,也不允许移动拷贝。
  lock(),调用线程将锁住该互斥量。线程调用该函数会发生下面 3 种情况:...
    阅读更多
 
    
    
    Linux下编写多线程程序需要包含头文件pthread.h
线程管理
线程id
typedef unsigned long int pthread_t;
获取自身线程id:
pthread_t pthread_self();
线程属性
// 初始化属性
int pthread_attr_init(pt...
    阅读更多
 
    
    
    RTP,Real-time Transport Protocol(实时传输协议),是针对Internet上多媒体数据流的一个传输协议, 由IETF作为RFC1889发布,现在最新的为RFC3550。
RTP被定义为在一对一或一对多的传输情况下工作,其目的是提供时间信息和实现流同步。
RTP的典型应用建立在UD...
    阅读更多
 
    
    
    RTCP,Real-time Transport Control Protocol(实时传输控制协议),是RTP协议的姊妹协议。
RTCP负责管理传输质量,在当前应用进程之间交换控制信息,提供流量控制和拥塞控制服务。
在RTP会话期间,各参与者周期性地传送RTCP包,包中含有已发送的数据包的数量、丢失的数据包...
    阅读更多