[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
Re: [Libevent-users] std::threads
On Sun, Mar 20, 2016 at 11:10:47AM -0400, Michael wrote:
> >Ugh, you don't need this wrapper, since evbuffer_get_length() will use
> >bufferevent's lock automatically.
>
> bufferevent_lock(bev_) and bufferevent_unlock(bev_) should not be used????
>
> How about bufferevent_write()???
evbuffer/bufferevent's are thread-safe, so the answer is *no*.
If we take a look at bufferevent_write() code we will see:
evbuffer_add()
Which is:
int
evbuffer_add(struct evbuffer *buf, const void *data_in, size_t datlen)
{
...
EVBUFFER_LOCK(buf);
And this is:
#define EVBUFFER_LOCK(buffer) EVLOCK_LOCK((buffer)->lock, 0)
#define EVLOCK_LOCK(lockvar,mode) if (lockvar) evthreadimpl_lock_lock_(mode, lockvar);
So IOW if buf->lock != NULL then it is thread-safe, and as I already mentioned
it will be not null if you pass BEV_OPT_THREADSAFE to bufferevent (and also you
need to enable one of locking mechanisms pthread/win32/your-own), since in this
case bufferevent->{output,input} will have the save lock as bufferevent.
I hope this will help.
Regards,
Azat.
***********************************************************************
To unsubscribe, send an e-mail to majordomo@xxxxxxxxxxxxx with
unsubscribe libevent-users in the body.