摘要: 一、共享内存带来的问题 读时没问题,写时会有竞争问题。 二、解决方法 1、最简单的办法就是对数据结构采用某种保护机制,确保只有进行修改的线程才能看到不变量被破坏时的中间状态。从其他访问线程的角度来看,修改不是已经完成了,就是还没开始。 2、另一个选择是对数据结构和不变量的设计进行修改,修改完的结构必 阅读全文
posted @ 2018-06-02 23:33 秋雨声 阅读(653) 评论(0) 推荐(0) 编辑
摘要: 一、启动线程 注意t是创建的线程,do_something是函数对象,不要传入函数。提供的函数对象会复制到新线程的存储空间当中,函数对象的执行和调用都在线程的内存空间中进行。 join(),detach() 二、线程传参 线程调用传参 注意线程初始化不会对舛讹的参数隐式转换,需要显式转换。 三、转移 阅读全文
posted @ 2018-06-02 19:08 秋雨声 阅读(157) 评论(0) 推荐(0) 编辑
摘要: 一 、多进程并发和多线程并发 多进程并发有进程间通信机制,更加安全。第一个缺点:进程间通信为避免一个进程修改另一个进程,比如读时共享写时复制使得花销更大;第二个缺点:需要启动进程,还要系统内核来管理进程,因为C++ 没有对进程提供任何封装。 但是进程相对独立,可以分布式运行在独立的机器上,算是一个优 阅读全文
posted @ 2018-06-02 15:39 秋雨声 阅读(208) 评论(0) 推荐(0) 编辑
摘要: 一、表的常见操作 对于一个链表,某个元素有其前驱和后继。对表的操作:find返回关键字首次出现的位置;insert和delete插入和删除某个元素;findkth返回某个位置上的元素; 二、表的简单数组实现 定义一个数组要初始化大小,要实现动态数组的形式,势必会浪费一定资源。由于数组的特性,会涉及后 阅读全文
posted @ 2018-06-02 14:05 秋雨声 阅读(188) 评论(0) 推荐(0) 编辑
摘要: 一、递归 递归自己调用自己,调用过程是一个碗状结构。但是需要确保在碗底能得到基准情形(数据)。有点类似多线程中嵌入多线程在解决斐波那契时的sync。其本质特征是一个大问题可以分解成更小的问题,小问题解法和大问题一样。 每次调用函数都要有三个操作:调用前先保存寄存器,并在返回时恢复;复制实参;旧值不能 阅读全文
posted @ 2018-06-02 10:25 秋雨声 阅读(188) 评论(0) 推荐(0) 编辑