TBB记录2

来源:互联网 发布:淘宝开店法律条款 编辑:程序博客网 时间:2024/06/04 19:43

抢先式调度器:

               操作系统限制一个程序使用处理器的时间,当使用时间到了之后,操作系统将强行让另外一个程序来使用这个处理器核。因此,操作系统能够使得邮件程序和网页浏览器看起来是同时运行的。

 

将一个问题划分到多个进程上,并且在各个进程之间只采用一种受限制的、相互同意的通信方式,这种做法有许多优势。其一:某个进程发生错误,对整个系统的影响减小。

 

进程线程:进程中所有线程都共享进程的数据。

 

在编写代码时:

    如果代码在没有并发引发的问题的情况下就无法运行,那么这段代码就不能被成为线程安全的(Thread-safe)。

由于多线程程序中,同一个函数以及同一个资源可能被多个控制流并发的使用,因此,多线程程序的代码必须是可冲入的和线程安全的。此时,需要注意线程的中互斥,保证在同一时刻只有一个线程能够执行有着全局操作的代码,二其他线程都被排除在这段代码之外。

C++库中有一些来自C库德函数,在这些函数中存在着需要在多次调用之间维护内部状态的问题,尤其是像asctime,ctime,gtime,localtime,rand和strtok等函数。在使用前应该查看文档,确保他们是线程安全的版本。 C++标准模板库(Standard Template Library)的容器类通常不是线程安全的,(因此,在线程构建模块中定义的一些容器也不是线程安全的)。

 

相同资源的并发访问:使用互斥和原子操作

 

 

不同的并行计算顺序得到的结果会有细微的差别。

 

避免死锁:避免使用锁,尤其是避免使用多个锁。如果必须使用锁:解决方案1)按照特定的顺序来获得锁(例如,首先A,然后B);2)当无法获得其中一个锁时,释放所有的锁,然后再重新开始。

 

条件竞争:不会导致程序无法运行,但是会导致程序结果出错,并且不容易被发现。解决方案:严格的方式管理恭喜那个数据,从而确保获得正确的顺序。避免使用基于锁的低级方法,因为这种方法很容易产生错误。锁很容易产生错误,并且较为低级。应该尽可能使用由算法模板和任务调度器实现的同步功能。例如:使用parallel—reduce 而不是使用共享变量。在pralallel_reduce 中的join操作将保证在所有子问题的回合操作完成之后才开始运行。