2018-12-06

以后有些的再日更技术贴,没有啥就写个简短的记事。
今天从新捡了一些以前的Unix环境高级编程的东西,好多都忘得差不多了。学过的还是应该系统性的重新复习一遍为好,总结下。

进程

IPC:

  • 无名管道(PIPE)
  • 有名管道(FIFO)
  • 消息队列(Message Queue)
  • 共享内存 (Shared Memory)
  • 信号 (Signal)
  • 信号量(Semaphore)
  • 内存映射(Memory Map)
  • 套接字(Socket)

线程

线程间的通信目的主要是用于线程同步,所以线程没有像进程通信中的用于数据交换的通信机制。因为进程地址通过分页机制,在物理上隔离了的。才有需要进行数据交换的通信机制,而线程共享同一个进程空间,类似同一线程组的线程互相自带共享内存属性。

而同一进程的不同线程共享同一份全局内存区域,其中包括初始化数据段、未初始化数据段,以及堆内存段,所以线程之间可以方便、快速地共享信息。只需要将数据复制到共享(全局或堆)变量中即可。不过,要避免出现多个线程试图同时修改同一份信息。

线程执行内存模型

线程间同步:

由于线程间共享公共资源,在同一映射的内存空间。线程切换的消耗时间很小,并发性可以做到很大。主要在线程间做同步与互斥操作,常见的同步互斥有:

  • 互斥锁
  • 读写锁
  • 条件变量
  • 信号量
  • 自旋锁

参考资料:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容