Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 在多线程处理期间防止争用条件_Vb.net_Multithreading_Race Condition - Fatal编程技术网

Vb.net 在多线程处理期间防止争用条件

Vb.net 在多线程处理期间防止争用条件,vb.net,multithreading,race-condition,Vb.net,Multithreading,Race Condition,我通过多个线程调用一个大型方法,使用synclock围绕全局字段递增来防止死锁和争用情况非常困难。该方法调用其他方法,我想知道线程是否也会在那些链接的其他方法中竞争(?) 我的想法是,如果我实例化一个类,在构造函数中启动线程,然后在第一个方法中将所有方法调用实例化为对象及其方法,那么应该避免争用条件 实例化的类也拥有自己的方法,所以我相信实例化类中的方法和子方法永远不应该相互竞争。因此,我相信我可以多次实例化该类,甚至不用使用线程——让GC赶上(可能效率低下?) 也许这比同步锁更有效:

我通过多个线程调用一个大型方法,使用synclock围绕全局字段递增来防止死锁和争用情况非常困难。该方法调用其他方法,我想知道线程是否也会在那些链接的其他方法中竞争(?)

我的想法是,如果我实例化一个类,在构造函数中启动线程,然后在第一个方法中将所有方法调用实例化为对象及其方法,那么应该避免争用条件


实例化的类也拥有自己的方法,所以我相信实例化类中的方法和子方法永远不应该相互竞争。因此,我相信我可以多次实例化该类,甚至不用使用线程——让GC赶上(可能效率低下?)

也许这比同步锁更有效:

        Interlocked.Increment(myGlobalVariable)

编辑:我不相信你关于将方法放入类中的理论会有助于防止数据竞争。方法定义在哪里并不重要,如果它们试图修改来自不同线程的相同数据,而没有有效的同步技术(例如互斥),那么数据竞争是绝对可能的。

另一个问题,如果打开例如1000个线程,它们都运行相同的方法,那么最佳实践技术是什么(子程序),并且你需要在这个方法中增加全局计数器和更新全局数组?即使你可以从这个方法中获得全局元素,大多数情况下是如何从每个线程将数组向量更新发送回全局的?我认为在我的PC上1000个线程将是一个非常糟糕的主意,如果可能的话。有多少物理和逻辑的p处理器计算机上有运行此程序的位置吗?我决定使用线程池控制一切。此外,使用Synclock Me…End Synclock几乎是一种无问题的方法。