Provided by: dnsjit_1.2.3-1_amd64 bug

NAME

       dnsjit.core.channel - Send data to another thread

SYNOPSIS

         local chan = require("dnsjit.core.channel").new()
         local thr = require("dnsjit.core.thread").new()
         thr:start(function(thr)
             local chan = thr:pop()
             local obj = chan:get()
             ...
         end)
         thr:push(chan)
         chan:put(...)
         chan:close()
         thr:stop()

DESCRIPTION

       A channel can be used to send data to another thread, this is done by putting a pointer to
       the data into a wait-free and lock-free ring buffer (concurrency kit).  The  channel  uses
       the  single producer, single consumer model (SPSC) so there can only be one writer and one
       reader.

   Attributes
       int closed
              Is 1 if the channel has been closed.

   Functions
       Channel.new(capacity)
              Create a new Channel, use the optional capacity to  specify  the  capacity  of  the
              channel  (buffer).   Capacity  must  be  a power-of-two greater than or equal to 4.
              Default capacity is 2048.

       Channel:log()
              Return the Log object to control logging of this instance or module.

       Channel:share()
              Return information to use when sharing this object between threads.

       Channel:put(obj)
              Put an object into the channel, if the channel is full then it will stall and  wait
              until space becomes available.  Object may be nil.

       Channel:put(obj)
              Try and put an object into the channel.  Returns 0 on success.

       Channel:get()
              Get  an  object  from  the  channel,  if the channel is empty it will wait until an
              object is available.  Returns nil if the channel is closed or if a nil  object  was
              explicitly put into the channel.

       Channel:try_get()
              Try  and  get  an  object from the channel.  Returns nil if there was no objects to
              get.

       Channel:size()
              Return number of enqueued objects.

       Channel:full()
              Returns true when channel is full.

       Channel:close()
              Close the channel.

       Channel:receive()
              Return the C functions and context for receiving objects.

       Channel:receiver(o)
              Set the receiver to pass objects to.  NOTE; The channel keeps no reference  of  the
              receiver, it needs to live as long as the channel does.

       Channel:run()
              Retrieve all objects from the channel and send it to the receiver.

SEE ALSO

       dnsjit.core.thread(3)

AUTHORS and CONTRIBUTORS

       Jerry Lundström (DNS-OARC), Tomáš Křížek (CZ.NIC), Petr Špaček (ISC)

       Maintained by DNS-OARC

              https://www.dns-oarc.net/

BUGS

       For issues and feature requests please use:

              https://github.com/DNS-OARC/dnsjit/issues

       For question and help please use:

              admin@dns-oarc.net