比方說有,在一個循環中運行4個消費者線程不斷用C在多線程程序中使用指針,局部變量++
function consumerLoop(threadIndex)
{
int myArray[100];
main loop {
..process data..
myArray[myIndex] += newValue
}
}
我還有一個監視線程這確實其它後臺任務。 我需要從監視器線程訪問這些線程中的每個線程的myArray
。
假設循環將永遠運行(所以本地變量將存在),並且從監視器線程所需的唯一操作是讀取所有線程的數組內容。
一種替代方法是將myArray
更改爲全局數組數組。但我猜測這會減緩消費者循環。
什麼是定義一個局部指針數組 int *p[4];
和添加一行中consumerLoop像這樣p[threadIndex] = myArray
和從監視線程訪問p分配每個元件到本地變量的地址的不良影響?
注:我在linux系統中運行它,語言是C++。當我從顯示器線程訪問數組內容時,我不關心數組內容的同步/有效性。讓我們遠離關於鎖定的討論
爲什麼不爲主線程中的每個消費者線程分配MyArray,並將地址傳遞給消費者線程以及互斥量以避免同步問題? – Manex
你沒有告訴我們你是什麼操作系統和什麼線程系統。並非所有線程模型都允許一個線程訪問另一個線程的局部變量。例如C11線程這個特性是實現定義的,它可能在那裏或者沒有。 –