Package kilim

Class MailboxMPSC<T>

java.lang.Object
kilim.MailboxMPSC<T>
All Implemented Interfaces:
EventPublisher, PauseReason

public class MailboxMPSC<T> extends Object implements PauseReason, EventPublisher
This is a typed buffer that supports single producers and a single consumer. It is the basic construct used for tasks to interact and synchronize with each other (as opposed to direct java calls or static member variables). put() and get() are the two essential functions. We use the term "block" to mean thread block, and "pause" to mean fiber pausing. The suffix "nb" on some methods (such as getnb()) stands for non-blocking. Both put() and get() have blocking and non-blocking variants in the form of putb(), putnb
  • Field Details

  • Constructor Details

    • MailboxMPSC

      public MailboxMPSC()
    • MailboxMPSC

      public MailboxMPSC(int initialSize)
  • Method Details

    • get

      public T get(EventSubscriber eo)
      Non-blocking, nonpausing get.
      Parameters:
      eo - . If non-null, registers this observer and calls it with a MessageAvailable event when a put() is done.
      Returns:
      buffered message if there's one, or null
    • put

      public boolean put(T msg, EventSubscriber eo)
    • getnb

      public T getnb()
      Get, don't pause or block.
      Returns:
      stored message, or null if no message found.
    • get

      public T get() throws Pausable
      Returns:
      non-null message.
      Throws:
      Pausable
    • get

      public T get(long timeoutMillis) throws Pausable
      Returns:
      non-null message, or null if timed out.
      Throws:
      Pausable
    • putnb

      public boolean putnb(T msg)
      Attempt to put a message, and return true if successful. The thread is not blocked, nor is the task paused under any circumstance.
    • addSpaceAvailableListener

      public void addSpaceAvailableListener(EventSubscriber spcSub)
    • removeSpaceAvailableListener

      public void removeSpaceAvailableListener(EventSubscriber spcSub)
    • addMsgAvailableListener

      public void addMsgAvailableListener(EventSubscriber msgSub)
    • removeMsgAvailableListener

      public void removeMsgAvailableListener(EventSubscriber msgSub)
    • getProducer

      private EventSubscriber getProducer()
    • srcContains

      private boolean srcContains(Task t)
    • getSize

      private long getSize()
    • put

      public void put(T msg) throws Pausable
      put a non-null message in the mailbox, and pause the calling task until the mailbox has space
      Throws:
      Pausable
    • put

      public boolean put(T msg, int timeoutMillis) throws Pausable
      put a non-null message in the mailbox, and pause the calling task for timeoutMillis if the mailbox is full.
      Throws:
      Pausable
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • isValid

      public boolean isValid(Task t)
      Description copied from interface: PauseReason
      True if the given task's reason for pausing is still valid.
      Specified by:
      isValid in interface PauseReason
    • fill

      public void fill(T[] msg)