On Thu, 3 Apr 2003, Tim Hockin wrote:
i remember i have read a statement about a lock free
ringbuffer
implemented in C somewhere.
courtesy of paul davis:
you should use a lock free ringbuffer. we will be adding example code
to the example-clients directory soon. existing code is in ardour's
source base (for C++). the example code will be in
example-clients/capture_client.c.
where ardour is
ardour.sf.net. (i doubt there is anything hugely non-C in
the ringbuffer code proper).
maybe it's just me, but I can't find said file...?
A lock free ringbuffer is not a big magic thing that take hours to make.
Its only two processes/threads/tasks/whatever sharing a ringbuffer. One of
them writes to the buffer and the other one reads. The one that reads,
stop to read if there isnt more data to read, and the writer stops to
write if the buffer is full. To make it lockfree the reader checks the
writers pointer (or some similar method) to find out wheter data is
available, and returns zeroes or false or something if data was not
available. Now go ahead and implement your own. :)
--