> On Oct 9, 2018, at 2:44 PM, Alan Carroll <solidwallofc...@oath.com.INVALID> 
> wrote:
> 
> 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.


Right. I think the example (below) makes sense if the critical_section() is 
blocking for example (for longish times). And then you can schedule that work 
on the “task” threads I think (and make sure you have enough of those thread).

Cheers,

— leif

> 
> 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