2011-02-24 74 views
4

我聽說有3種併發的。什麼是*確定性併發性*?

  1. 確定性併發
  2. 消息傳遞併發
  3. 共享狀態併發

我知道#2(=演員模型)和#3(=一般線程),但不#1 。那是什麼?

回答

4

確定性併發是一個併發編程模型,使得寫入在該模型程序具有以下屬性:對於給定的一組輸入,一個程序的輸出值對於任何執行調度是相同的。這意味着節目的輸出完全取決於節目的輸入。

有辦法,以確保此屬性。其中一種方法是所謂的單任務程序,其中的變量沒有被初始化,但可能至多分配一次。讀取未初始化的變量會暫停,直到它被分配一個值(可能通過其他線程)。 Mozart編程語言支持這些。

另一種方法是使用所有權分析來確定哪些線程'擁有'不同的引用,並確保沒有2個線程在同一'時間'寫入引用​​,所以沒有數據競爭。

+0

它看起來肯定與協程無關:) – Eonil 2011-03-13 10:46:34

+0

不,我不會說它確實如果你認爲併發意味着多個計算並行發生。但是,您可以在確定性併發模型(如單指派編程)中使用協程。 – axel22 2011-03-13 11:53:33

0

我以前沒有聽說過這個詞,但coroutines浮現在腦海中。他們不提供「真正的」併發,在只有一個程序在任何特定時刻執行的意義,但他們在這個意義上併發一組交互協同程序都可以取得進步,而不必等待對方完。

+0

我猜這也是一個協程,但我不能確定... – Eonil 2011-02-24 08:04:05