It's a bit more complex than that. One key thing is that if you schedule an
event for a continuation, when the event handler is called the continuation
mutex will be locked. Therefore it's rarely the case a plugin needs to lock
its continuations explicitly. For that reason, simply scheduling handles
lock contention without thread blocking.

In the core, there is a class, MutexLock, which does the RAII style locking.

On Tue, Oct 9, 2018 at 2:26 PM Walt Karas <wka...@oath.com.invalid> wrote:

> In TS, is it important to favor use of continuation mutexes to avoid
> thread blocking.  For example, should code like this:
>
> before();
> TSMutexLock(mutex);
> critical_section();
> TSMutexUnlock(mutex);
> after();
>
> be replaced with code like:
>
> int contf_after(TSCont, TSEvent, void *)
> {
>   after();
>
>   return 0;
> }
>
> int contf_critical_section(TSCont, TSEvent, void *)
> {
>   critical_section();
>
>   static TSCont cont_after = TSContCreate(contf_after, nullptr);
>
>   TSContSchedule(cont_after, 0, TS_THREAD_POOL_DEFAULT);
>
>   return 0;
> }
>
> // ...
>
> before();
>
> static TSCont cont_critical_section =
> TSContCreate(contf_critical_section, mutex);
>
> TSContSchedule(cont_critical_section, 0, TS_THREAD_POOL_DEFAULT);
>
> // ...
>
> (This is plugin code but I assume the same principle would apply to core
> code.)
>


-- 
*Beware the fisherman who's casting out his line in to a dried up riverbed.*
*Oh don't try to tell him 'cause he won't believe. Throw some bread to the
ducks instead.*
*It's easier that way. *- Genesis : Duke : VI 25-28

Reply via email to