我有一组 Ruby 守护程序,它们在启动时将信息写入正在运行的守护程序表中。守护程序永远运行,或者直到它们收到信号。信号处理程序删除数据库中守护程序的记录。在 Ruby 2.0 之前运行良好。从 2.0 开始,我得到了错误lock': can't be called from trap context (ThreadError)
。调查表明,Ruby 在信号处理程序中不允许这样做(和记录),因为它可能会引入竞争和死锁条件。很公平。但似乎我想做的事情是合理的。那么这样做的正确方法是什么?设置标志和轮询似乎真的很难看。肯定有更好的办法。
问问题
229 次