将对对象的引用传递给新线程我有一个包含非常大的双3D数组的对象,我需要启动一个新线程,它需要来自该数组的数据,所以我需要启动一个传递该对象的新线程(其中包含许多其他数据也是新线程,或者我只是将3D数组传递给新线程。对于第一个解决方案,我只做:MyClass{。..publicdouble[,,]_data=newdouble[x,y,z];...}MyMethod(objectMyObject){//dostuffwith(MyObjectasMyClass)}MyClass_newObject=newMyClass();Threadthread=newThread(newParameterizedThreadStart(MyMethod));thread.Start(_newObject);我现在的问题是:当我将对象_newObject传递给新线程时,对象是通过引用发送到线程还是复制对象和Thecopyusedbythenewthread?问题是对象包含大约300MB的数据并且几乎不可能使用副本因为我需要启动大约10个需要使用对象数据的线程。参考。如果我在线程中更改数据,它会更改您放入的原始数据。如果您在线程外更改数据,同样适用,线程将看到修改后的数据。您需要一个适当的锁定机制,以便在从多个线程访问数据时不会发生冲突。10个线程?您将如何维护_newObject的数据完整性?如果您不通过副本,只需使用参考即可。如果在10个不同的线程中调用方法MyMethod(objectMyObject),MyObject会是一个不同的对象吗?如果那不是您折射的最佳方式。此外,您应该记住,线程只是一组要执行的指令。所以你的对象大小不会因为你使用多线程而增加内存。多线程的优点是使用不同的线程来处理指令而不是复制对象。假设你的MyClass是一个类,那么对该对象的引用只传递给新线程,因为它是一个引用类型(阅读更多关于MSDN上的引用类型),我还建议你使用锁来避免你只是使用lock关键字实现的死锁问题更准确地说,它是通过引用发送副本。由于这是一个引用类型,在这种情况下只复制引用,而不是所有数据。这就是为什么您必须关心锁定机制,以防多个线程访问该对象引用的数据。以上就是C#学习教程:将对象的引用传递给新建Thread的全部内容分享。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
