2012-10-14 39 views
0

例如,在一個多線程程序中,Global,volatile,extern變量可以進入臨界區,因爲它們可以一次被多個線程訪問。 也shmget()分配共享內存。 我想知道在用戶空間和內核空間中,所有其他內存類型都可能是關鍵部分。共享內存下可以使用哪些不同類型的內存?

+2

如果_code_,而不是數據,關鍵部分會涉及部分。 – Mat

+1

這個問題沒有多大意義。對於什麼是關鍵部分甚至是*是如此不重要,這有點類似於問「哪種類型的蔬菜是牛?」。除了「... WTF?」以外,沒有真正的答案。 – cHao

回答

0

查看這些鏈接可以很好地理解共享內存區域和critical sections在真實世界系統上的操作。

bcook.cs.georgiasouthern.edu/cs523/critical.htm

blogs.msdn.com/b/larryosterman/archive/2005/08/24/455741.aspx

當你談論不同的概念,即,兩個使用共同的數據,例如隊列進程

ibm.com/developerworks/linux/library/l-linux-synchronization/index.html

+0

像管道(unix)和全局變量是共享內存,所有其他東西可以共享內存? –

+0

全局變量不是共享內存。它們嚴格限於一個過程。另外技術上管道也不是共享內存,而管道和共享內存是進程間通信(IPC)的兩種不同方式。 – TheCodeArtist

0

共享內存通常包含在關鍵部分下。共享內存的原因可以一次由多個線程訪問。爲了確保某個共享內存一次只能被一個線程訪問,使用關鍵部分。

不確定共享內存是否進一步分類。

+0

像管道(unix)和全局變量是共享內存,所有其他東西可以共享內存? –

+0

據我所知,任何在線程堆棧之外分配的東西都在共享內存中,實際上可以被多個線程訪問。只有線程堆棧內存對於任何線程都是私有的,所有其他內存位置將在共享內存下。 – jags

0

共享內存可能會有所不同,你需要「照顧「修改/添加/刪除的關鍵部分。 至於線程,除堆棧和代碼段外,所有內容都是共享的,理論上主進程到達的每段數據都是這些線程之間的共享內存。

+0

像管道(unix)和全局變量是共享內存,所有其他東西可以共享內存? –