Provided by: dnsjit_1.3.0-1build2_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