"nick thomas" <[EMAIL PROTECTED]> writes: > I apologize if this has been discussed previously on the list; Google > didn't seem to be turning anything up from the list archives. > > I'm writing my first DSP program for JACK. My problem is this: I've > got a high-priority audio synthesis thread, and a low-priority user > interface thread, and they need to communicate: the UI thread needs to > tell the synthesis thread to respond to the user twisting knobs and > moving sliders in the interface, and the the synthesis thread needs to > tell the UI thread what it's doing, so that the UI thread can update > its monitoring widgets. I'm sure that this is an extremely common > situation for JACK programs, and I was wondering how to handle it. > > I know of two possible approaches: using locks and shared memory, or > using FIFOs and no shared memory. Vanilla pthreads provides direct > support for the former approach, and JACK's ringbuffer interface seems > to provide the necessary primitives to implement the latter approach. > > A lock-based system would probably be substantially simpler to > implement than a lock-free one; however, I can imagine some possible > priority inversion issues with a lock-based system. I don't know if > that is ever a problem in practice, with real-time scheduling enabled. > > Anyway, there's my question: which approach (lock-based or lock-free) > is generally favored for JACK programs? Thanks for helping a newbie > out! >
Recently I had very similar/same problem for the lv2 dynparam extension support libraries. Since I missed article explaining all possible approaches with pros and cons I tried to make one. It available here: http://nedko.arnaudov.name/wiki/moin.cgi/Accessing_data_from_audio_process_thread_and_UI_thread I plan to move it to our lad wiki once it is up, so anybody can contribute to it. This really a *draft* document, but I made it with hope that someone will find it helpful. -- Nedko Arnaudov <GnuPG KeyID: DE1716B0>
pgpptxYwvAUKU.pgp
Description: PGP signature
