2013-12-21 34 views
2

我有一個類方法isConnected(socket soc),如果套接字連接,它將返回true;如果不是,則返回false。我想在具有相同線程函數的兩個正在運行的線程中調用它。 它不安全嗎?在線程函數上調用類方法

因爲我知道方法本身駐留在內存中,並且它沿着線程共享,所以如果一個線程調用isConnected方法並且它正在運行,那麼其他線程在第一個線程完成該方法之前一定不能調用它。

,我傳遞變量插座從線到isConnected方法

+0

_「因爲我知道該方法本身駐留在內存中,並且它沿着這個方向共享」 - 一個方法的代碼駐留在RAM中並不意味着它可以在每個調用者都擁有自己的情況下同時執行疊加。如果'IsConnected()'方法不訪問超出範圍的變量,那麼它最可能是線程安全的。 – CodeCaster

+0

的問題是。我把變量從線程傳遞給這個方法, 所以它超出了它的範圍,對吧? –

回答

2

除非該方法使用一些共享資源,那麼它是安全的,因爲它會在自己的堆棧創建的局部變量,不會與其他線程共享。

但請注意,一個線程可以返回true,另一個線程可能會返回false,因爲可以找到一個套接字關閉,另一個線程可以找到它仍然打開。

因此,一次從兩個線程調用它並不是一個好主意。

+0

我將套接字變量從線程傳遞給該方法,我知道該方法是否將使用從最新線程獲取的新套接字替換舊套接字,因爲該方法是共享的 –

+0

方法不共享,但套接字可以。如果你只有一個套接字對象傳遞給兩個線程,那麼它可能會爆炸。但是,如果每個線程都使用它自己的套接字,那就好了。 –

+0

謝謝,我剛剛知道,那麼對於每次調用,這個函數是否會創建它自己的棧? –