Package kilim

Class MailboxMPSC<T>

  • All Implemented Interfaces:
    EventPublisher, PauseReason

    public class MailboxMPSC<T>
    extends java.lang.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
    • Constructor Detail

      • MailboxMPSC

        public MailboxMPSC()
      • MailboxMPSC

        public MailboxMPSC​(int initialSize)
    • Method Detail

      • 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
      • getnb

        public T getnb()
        Get, don't pause or block.
        Returns:
        stored message, or null if no message found.
      • 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)
      • 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 java.lang.String toString()
        Overrides:
        toString in class java.lang.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)