On Tue, Aug 04, 2009 at 12:17:44PM +0300, Avi Kivity wrote: > On 08/04/2009 11:54 AM, Michael S. Tsirkin wrote: >> On Tue, Aug 04, 2009 at 11:53:03AM +0300, Avi Kivity wrote: >> >>> On 08/03/2009 07:57 PM, Michael S. Tsirkin wrote: >>> >>>>> Why not do it at the point of the write? >>>>> >>>>> if (value != ctx->count) { >>>>> ctx->count = value; >>>>> wake_things_up(); >>>>> } >>>>> >>>>> >>>> What if write comes before read? >>>> >>>> >>> The read will get the new value. >>> >> >> Yes :) But how does read know it should not block? >> > > If a different read comes after the write but after our read, it will > have transferred the value, resulting in the same situation. Not the same: one reader wakes up, others sleep. Multiple reads from the same fd behave this way for any file I can think of. Consider regular eventfd, or a pipe, a socket ... But if we want to support blocking reads, we probably should not require the readers to sync with writers. > I think reads should never block with a state based mechanism. Yes, with no support for blocking reads, we don't need the state. In that case, we probably want to error on open out unless O_NONBLOCK is specified. But why is this a good idea? > -- > error compiling committee.c: too many arguments to function -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html