我有一个特定的锁定顺序,我正在遵循。我正在编写一个线程池来执行一些当前按顺序完成的任务。
锁定顺序为 pool->queue->job。
但是,有时我需要锁定作业以检查作业的状态,然后锁定队列以将作业从一个队列移动到另一个队列。所以,按照锁定顺序,我得到了这个:
lock job
if (job->state == CANCELED) {
unlock job
lock queue
lock job
// check that it is still canceled and do work
}
我的问题是,是否有没有解锁/锁定工作的替代方法?当必须保留锁定顺序并且需要“更高”的锁定时,如何处理?