Provided by: dnsjit_1.2.3-2_amd64
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