On Saturday, 3 January 2015 at 15:44:16 UTC, Matt wrote:
Right, I've been looking at core.atomic, but it has very little documentation, and it's territory I haven't explored, yet. Any chance of some pointers along the way?

Could you be more specific about what you need help understanding? You can implement a very simple double buffer like so:

  synchronized final class DoubleBuffer (T) {
    T[][2] data;
    uint write_index;

    shared void swap () {
      atomicStore (write_index, (write_index + 1) % 2);
      (cast()this).buffer[write_index].clear;
    }

    shared @property write_buffer () {
      return (cast()this).buffer[write_index][];
    }
    shared @property read_buffer () {
      return (cast()this).buffer[(write_index + 1) % 2][];
    }
  }

Just append to write_buffer, call swap, then read from read_buffer. Make sure you declare the instance shared. Benjamin's post links to a more robust and realistic implementation.

Reply via email to