在linux上,我有一个安装程序,在其中产生了一个使用SIGPROF信号为采样分析器启动其父线程的分析器线程。我明确发送信号,而不是依赖setitimer来获得更好的控制。我可能需要重新考虑这一点,但现在假设我自己发送信号。只有当线程正在运行时才发送信号给线程
我的问题是,它始终发送信号,即使被配置线程正在系统调用中休眠。这样,我的样品环缓冲液就会出现不足。
是否有某种方法可以检测配置线程的运行状态,即使它在检查后可能会立即发生变化?或者更好的是,发送一个信号,使目标处于运行状态?
我可以排序的假货通过原子递增的异形线的信号处理程序计数器,并检查它是否是一个从探查线程改变:
volatile int samples; while(1) { int old_samples = samples; pthread_kill(profiled_thread, SIGPROF); while (samples == old_samples) usleep(appropriate amount); }
或东西,但我不知道是否有一个更好的办法。 (上面的代码简化了延迟计算,因为实际上整个点都是无偏样本,但现在忽略)。