這是一個普遍的事實,pthread_mutex_lock()應該總是應用於線程函數中使用的全局變量和靜態變量。線程函數內的局部變量如何?對於具有局部變量的線程函數,pthread_mutex_lock是否必需?
什麼是用例,其中線程函數中的局部變量應該被鎖定,還是應該始終被鎖定?
例子:
int func(void)
{
int var;
var++; // What are the usecases in which this should be locked?
}
pthread_create(&threadid1, NULL, func, NULL);
pthread_create(&threadid2, NULL, func, NULL);
據我所知,你可以在圍牆,互斥和/或原子上構建多線程應用程序,所以你的「通用事實」更像是一個觀點。 – user2485710
對於在多個線程中使用的變量,您應該使用互斥鎖。如果你從兩個線程訪問你的本地變量(使用mutex_lock())。 Othrewise no。 –
應該可以從多個線程訪問更正確的線程化基元。你如何做到這一點取決於你。全球和靜態範圍界定只是可以實現的兩種方式。相反,鎖定CAN僅在鎖的主題可被另一個線程訪問的情況下有用。然而,在我看來,雖然可以在不使用全局/靜態範圍的情況下共享變量,但由於最少突然出現的原則,這是不可取的。 – Aron