2011/11/21 马承珂 <[email protected]>:
> I want to use ev_async to implement the "tell" work, so I want to know is
> there any mutext or lock in ev_async functions? will a thread be blocked
> when calling ev_async functions? what low-level api does ev_async used on
> Linux platform?

On Linux, ev_async_send sets a flag and then writes to an eventfd.
This means the ev_async_send call definitely should not block: no lock
in user-space is involved and the write call in the kernel should not
block.

On Linux kernels older than 2.6.22 and on all non-Linux systems (I
believe), eventfd is not supported.  I think this implementation can
block if the pipe is full, which could happen eg. if you are calling
ev_async_send many times (even on different ev_async watchers).  In
recent (yet to be released, libev-4.09) versions of libev, this write
to the pipe is guarded by some flag construction, which might have the
effect that in such versions the pipe write won't block, but I don't
know if it does.  I guess schmorp can answer this.  Frankly, I don't
know much about SMP and don't even understand whether that new flag
construction must work reliably (that is, can't cause the event loop
to miss an async send event).

Ambrus

_______________________________________________
libev mailing list
[email protected]
http://lists.schmorp.de/cgi-bin/mailman/listinfo/libev

Reply via email to