不是特定于语言的,但我在 C# 中有这个:
public static void StartJob() {
ThreadPool.QueueUserWorkItem(s => {
if (Monitor.TryEnter(_lock)) {
ProcessRows();
Monitor.Exit(_lock);
}
}
);
ProcessRows()
处理并删除数据库中的行,直到删除所有行。在程序启动时以及每当将一行添加到程序中其他地方的数据库时,StartJob
都会调用它,以确保在不阻塞程序的情况下处理所有行。现在,如果在即将释放锁的同时添加一行StartJob
,则不会对其进行处理。
如何确保处理所有行?ProcessRows()
除非添加行,否则我宁愿不运行。