C# 在线程函数上调用类方法

C# 在线程函数上调用类方法,c#,thread-safety,C#,Thread Safety,我有一个类方法isConnected(socketsoc),如果socket已连接,它将返回true;如果未连接,它将返回false。我想在两个运行的线程中使用相同的线程函数调用它。 这不安全吗 因为我知道方法本身驻留在内存中,并且它沿着线程共享,所以如果一个线程调用isConnected方法并且它正在运行,那么在第一个线程使用该方法完成之前,另一个线程不能调用它 我将变量套接字从线程传递给isConnected方法,除非该方法使用一些共享资源,否则它是安全的,因为它将在自己的堆栈上创建局部变量

我有一个类方法isConnected(socketsoc),如果socket已连接,它将返回true;如果未连接,它将返回false。我想在两个运行的线程中使用相同的线程函数调用它。 这不安全吗

因为我知道方法本身驻留在内存中,并且它沿着线程共享,所以如果一个线程调用isConnected方法并且它正在运行,那么在第一个线程使用该方法完成之前,另一个线程不能调用它


我将变量套接字从线程传递给isConnected方法,除非该方法使用一些共享资源,否则它是安全的,因为它将在自己的堆栈上创建局部变量,并且不会与其他线程共享

但是请注意,一个线程可以返回true,另一个线程可以返回false,因为一个线程可以发现套接字已关闭,而另一个线程可以发现它仍处于打开状态


因此,一次从两个线程调用它并不是一个好主意。

“因为我知道方法本身驻留在内存中,并且它沿着线程共享”-方法的代码驻留在RAM中一次并不意味着它可以在每个调用方都有自己的堆栈的情况下并发执行。如果
IsConnected()。我将变量从线程传递给这个方法,所以它超出了它的作用域,对吗?我将套接字变量从线程传递给这个方法,我知道这个方法是否会用他从最新线程获得的新套接字替换旧套接字,因为这个方法是共享的。方法是不共享的,但是套接字可以。如果只有一个套接字对象传递给两个线程,那么它可能会爆炸。但是如果每个线程都使用自己的套接字,那就好了。谢谢,我刚刚知道,那么你的意思是,对于每个调用,函数都会创建自己的堆栈吗?不,每个线程都有自己的堆栈,其中存储了局部变量。方法只是使用此变量操作的对象。但是你可以拥有一个资源,比如说你的套接字,它是在主线程上创建的,并传递给两个新线程,这样它们就可以使用它,因此它是一个共享资源——如果第一个线程改变了它,那么第二个线程就会看到它改变了。