我的程序有一个主线程和一堆子线程,除其他外,它们写入同一个日志文件。每天一次,主线程检查日志文件是否太大,然后将其归档、关闭并压缩。子线程在要写入日志时,会检查文件的 fd 是否不为空。如果有效,则继续写入日志,如果无效,则启动新的日志文件。问题是,由于并发性,一旦子线程将获得 fd,一切看起来都很好,但随后它被中断,主线程归档文件,并且当子线程恢复执行并尝试写入时日志,fd 不再有效并发生段错误。那么解决这个问题的最佳方法是什么?我考虑在主线程和执行 log_write 的子线程部分上使用相同的互斥锁。那应该可以解决这个问题,但我真的不想阻止多个子线程同时执行 log_write。当然,日志可能有点乱,但现在这对我来说不是问题。我只需要一种机制来防止子线程在日志归档过程开始后开始写入日志。这看起来像是信号量的情况吗?