标签:#并发性

共 8 篇文章

可重入

若一個程序或子程序可以「在任意時刻被中斷然後作業系統調度執行另一段程式碼,這段程式碼又使用了該副程式不會出錯」,則稱其為可重入(reentrant 或 re-entrant)的。即當該副程式正在運作時,執行线程可以再次進入並執行它,仍然可得到符合設計時所預期的結果。與多執行緒併發執行的线程安全不同,可重入強調對單一執行緒執行時重新進入同一個子程序仍然是安全的。 可重入概念是在單執行緒作業系統的時代提出的。一個子程序的重入,可能由於自身原…

内存排序

内存排序是指CPU访问主存时的顺序。可以是编译器在编译时产生,也可以是CPU在运行时产生。反映了内存操作重排序,乱序执行,从而充分利用不同内存的总线带宽。 现代处理器大都是乱序执行。因此需要内存屏障以确保多线程的同步。 编译时内存排序 编译时内存屏障 这些内存屏障阻止编译器在编译时乱序指令,但在运行时无效。 GNU内联汇编语句 asm volatile("" ::: "memory"); 或者 asm volatile ("" ::: …

同步 (计算机科学)

计算机科学中, 同步(synchronization)是指两个不同但有联系的概念:进程同步与数据同步。进程同步指多个进程在特定点会合(join up)或者握手使得达成协议或者使得操作序列有序。数据同步指一个数据集的多份拷贝一致以维护完整性。常用进程同步原语实现数据同步。 线程或进程同步 )]] 多个线程(或进程)要执行同一个特定的不可重入的程序代码块(称为临界区),这就需要适当的并发控制同步技术。否则,可能会发生竞态条件。 另一种同步要…

生产者消费者问题

生产者消费者问题(),也称有限缓冲问题(),是一个多进程同步问题的经典案例。该问题描述了共享固定大小缓冲区的两个进程——即所谓的“生产者”和“消费者”——在实际运行时会发生的问题。生产者的主要作用是生成一定量的数据放到缓冲区中,然后重复此过程。与此同时,消费者也在缓冲区消耗这些数据。该问题的关键就是要保证生产者不会在缓冲区满时加入数据,消费者也不会在缓冲区中空时消耗数据。 要解决该问题,就必须让生产者在缓冲区满时休眠(要么干脆就放弃数据…

饥饿 (计算机科学)

在计算机科学中,饥饿(starvation)是指在并发计算中,进程一直无法获得运行所需的必要资源而发生的问题。排程、互斥锁算法、资源泄漏等都可能导致饥饿,或者在被DoS攻击(如fork炸弹)时主动产生饥饿。 在并发计算中,如果饥饿不可能发生,这个算法就被称为是“starvation-free”(无饥饿)、“lockout-freed”(无闭锁)的,或者称其拥有「有限旁路」(finite bypass)。这一属性是的例子,也是互斥锁算法的…

并发性

並行性()是在计算机科学中,同一個系统擁有多個計算處理程序,這些處理程序有同时执行的潛在互動特性,因此系統會有相當多個執行路徑且結果可能具有不確定性。并发计算可能会在具備多核心的同一个晶片中交錯运行,以优先分时线程在同一個處理器中執行,或在不同的处理器执行。 一些数理模型已經為解決一般的並行計算問題而發展,包括Petri网、进程、PRAM模型和演员模型。 议题 是一個關於並行性和分享資源的典型問題。]] 因為在並行系統下運算可以在執行時…

死锁

死锁(),又譯為-{zh-cn:死结; zh-tw:死鎖;}-,計算機科學名詞。當兩個以上的運算單元,雙方都在等待對方停止執行,以取得系統資源,但是沒有一方提前退出時,就稱為死結。在多工作業系統中,作業系統為了協調不同线程,能否取得系統資源時,為了讓系統正常運作,必須要解決這個問題。另一種相似的情況稱為「活锁」。 简介 例如,一个进程p1占用了显示器,同时又必须使用打印机,而打印机被进程p2占用,p2又必须使用显示器,这样就形成了死锁。…

转弯限制路由

路由算法决定数据包从网络中的源路由器到目标路由器所遵循的路径。设计路由算法时要重点考虑的一个方面是避免死锁。转弯限制路由 是一种用于mesh拓扑系列的路由算法,它通过限制算法中允许的下一方向来避免死锁,同时确定网络中从源节点到目标节点的路由。 产生死锁的原因 死锁(如图 1 所示)是由于缓冲区或链接等网络资源饱和而无法进一步传输数据包的情况。死锁的主要原因是网络中信道的循环获取。 例如,考虑网络中有四个信道。四个数据包已经填满了这四个信…