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
Multithreading 为什么SuspendThread(或任何类似的函数)不安全?_Multithreading_Garbage Collection - Fatal编程技术网

Multithreading 为什么SuspendThread(或任何类似的函数)不安全?

Multithreading 为什么SuspendThread(或任何类似的函数)不安全?,multithreading,garbage-collection,Multithreading,Garbage Collection,我正在写一个增量gc。当GC搜索线程堆栈时,该线程不得接触其堆栈。但是,使所有访问堆栈关键部分的权限都过于昂贵。。因此,我想在gc搜索其堆栈时挂起线程。但我听说SuspendThread(或任何类似的函数)是不安全的。为什么???有一个不可避免的致命问题:如果挂起的线程持有挂起它的线程需要的锁,例如内存分配器上的锁或某个系统库中的锁,该怎么办轰@Dukeling谢谢。我增加了一些细节。嗯。。在这种情况下,在GC完成对一个线程的堆栈的搜索后,GC恢复该线程。没有你在GC里说的锁。因此,在这种情况下

我正在写一个增量gc。当GC搜索线程堆栈时,该线程不得接触其堆栈。但是,使所有访问堆栈关键部分的权限都过于昂贵。。因此,我想在gc搜索其堆栈时挂起线程。但我听说
SuspendThread
(或任何类似的函数)是不安全的。为什么???

有一个不可避免的致命问题:如果挂起的线程持有挂起它的线程需要的锁,例如内存分配器上的锁或某个系统库中的锁,该怎么办

@Dukeling谢谢。我增加了一些细节。嗯。。在这种情况下,在GC完成对一个线程的堆栈的搜索后,GC恢复该线程。没有你在GC里说的锁。因此,在这种情况下,我可以使用
SuspendThread
?@ikh您的意思是您的垃圾收集器根本不会调用任何系统库?它不会释放任何内存吗?如果你能在线程停止时遵循这些规则,你可能会没事的。。似乎我应该看看我的平台文档,知道GC使用的函数是否锁定。。谢谢大家!@ikh通常认为文件不存在。如果有可用的源代码,您可能必须仔细阅读。相反,用一种明智的方法来做这件事——用它的协作挂起线程。巧妙地要求线程告诉您何时它没有持有任何锁,并让它等待,直到您告诉它继续。GC在哪里运行?