[PD-dev] Is gensym() threadsafe?

Kjetil S. Matheussen kjetil at ccrma.stanford.edu
Tue Dec 13 23:04:16 CET 2005


On Tue, 13 Dec 2005, Kjetil S. Matheussen wrote:

> On Tue, 13 Dec 2005, Kjetil S. Matheussen wrote:
>
>> On Tue, 13 Dec 2005, Tim Blechmann wrote:
>> 
>>> hi kjetil,
>>> 
>>>> I'm working on the snd external, and wonder about gensyms thread
>>>> safety. It looks to be, but I'm not quite sure. In case it isn't
>>>> is there a locking-mechanism or something I can use?
>>>> 
>>>> I also see that there are some functions called sys_lock or
>>>> something, how does they work?
>>> 
>>> gensym is basically not thread safe ... for the devel branch i made
>>> gensym threadsafe, but if you want to write code for miller's pd, you
>>> need to use the syslock ...
>>> 
>> 
>> Thanks! So how do I use syslock from another thread?
>> 
>> Does this make sence:?
>> 
>> t_symbol *thread_safe_gensym(char *symbol){
>> t_symbol *ret;
>> sys_lock();
>> ret=gensym(symbol);
>> sys_unlock();
>> return ret;
>> }
>> 
>
> Hm, no, actually, I can't do that. Snd isn't running with realtime priority, 
> so if pd needs to wait for snd, pd will in practice lose its realtime 
> priority when it has to wait for Snd.
> Miller P.: Please apply Tim's threadsafe gensym to your version. :-)
>

Oops, of course, I can just do it like this:

t_symbol *thread_safe_gensym(char *symbol){
   t_symbol *ret;
   struct sched_param par;
   par.sched_priority = sched_get_priority_max(SCHED_FIFO);
   sched_setscheduler(0,SCHED_FIFO,&par);
   sys_lock();
   ret=gensym(symbol);
   sys_unlock();
   sched_setscheduler(0,SCHED_OTHER,&par);
   return ret;
}


-- 




More information about the Pd-dev mailing list