1
父進程和子進程會死鎖如果父進程正在使用資源,子進程也會得到相同的資源?如果父母包含兩個線程呢?孩子也會得到2個線程嗎?叉如何可以線程安全?有關線程和死鎖的一些問題
父進程和子進程會死鎖如果父進程正在使用資源,子進程也會得到相同的資源?如果父母包含兩個線程呢?孩子也會得到2個線程嗎?叉如何可以線程安全?有關線程和死鎖的一些問題
的一個句子描述從Wikipedia是
死鎖是一種情況,其中兩個或更多個相互競爭的操作分別等待對方完成,並且因此既不以往一樣。
最簡單的情況是兩個線程和兩個資源。
線程A:
acquireResource(r1)
acquireResource(r2)
// Do stuff
releaseResource(r1)
releaseResource(r2)
線程B:如果發生以下事件序列
acquireResrouce(r2)
acquireResource(r1)
// Do stuff
releaseResource(r1)
releaseResource(r2)
有了這個代碼發生死鎖。
此時線程A無法繼續,因爲它是R2已經擁有和線程B能不會繼續,因爲r1是擁有的。因此,這兩個線程都不能繼續發佈資源。這是一個僵局。
通過確保在整個代碼中以相同的順序獲取資源,可以避免像這樣簡單的情況。例如,如果線程B首先獲取r1,則不會出現死鎖。有很多其他方法可以實現僵局,儘管這些方法難以避免。
這真的很難說。你爲什麼不試試問一個非常具體的問題和一個資源,以及一個共享場景?一些資源可以共享;有些不能。有些可以通過某些方式共享,但不是其他方式。例如,通常可以讀取內存,但不能在沒有某種同步的情況下同時寫入內存,而操作系統會爲您仲裁CPU。 – WhirlWind 2010-05-11 01:53:44
另外,如果您認爲自己已經收到了有關您問題的寶貴答案,那麼您可能希望接受優秀的答案,以獎勵那些努力幫助您的人。 – WhirlWind 2010-05-11 01:54:39