Il 18/09/2012 17:05, Paolo Bonzini ha scritto: >>>>>> >>> >> + qemu_co_mutex_unlock(&s->lock); >>>>>> >>> >> + qemu_co_rwlock_wrlock(&m->l2_writeback_lock); >>>> >> > >>>> >> > Can anybody else take the lock as reader again at this point? If >>>> >> > not, I >>>> >> > wonder if this is more clear if you write it as a CoQueue. >> > This isn't "let one writer complete, then wake up n readers" (which >> > would indeed be represented more naturally as CoQueue), but rather "let >> > n readers complete, then wake up one writer". > So would it be representable as a list of children (matching the parent > pointer) and then unlocking is > > remove self from children list > if the children list is empty, wake parent->co > > ?
Of course this only work if the list of children cannot become non-empty anymore after the writer restarts. Paolo