【发布时间】:2019-10-22 11:32:40
【问题描述】:
我正在编写一个垃圾收集器玩具,当我的 GC 开始收集时,我需要暂停正在运行的程序(停止世界 gc),C++ 可以这样做吗?
【问题讨论】:
-
不是普通的 C++ AFAIK,但有像
SuspendThread()这样的函数。 -
C++ 没有。操作系统是的。但是,您需要简明挂起的线程可能会离开进程的状态。假设在挂起时线程正在堆上持有锁(在新/删除的中间)。在该线程重新启动之前,该进程(包括 GC 线程)现在没有堆。这也适用于任何其他锁。
-
您真的需要暂停所有个线程,还是只是在收集过程中锁定所有其他GC功能?也就是说,如果一个线程没有做任何与 GC 相关的事情,它是否需要暂停?
-
".. 我会用 gc 阅读一些开源运行时..." 解释系统要容易得多,因为您可以在适当的点停止解释器。