DOKK / manpages / debian 12 / dnsjit / dnsjit.core.channel.3.en
dnsjit.core.channel(3) Library Functions Manual dnsjit.core.channel(3)

dnsjit.core.channel - Send data to another thread


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()

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.

Is 1 if the channel has been closed.

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.
Return the Log object to control logging of this instance or module.
Return information to use when sharing this object between threads.
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.
Try and put an object into the channel. Returns 0 on success.
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.
Try and get an object from the channel. Returns nil if there was no objects to get.
Return number of enqueued objects.
Returns true when channel is full.
Close the channel.
Return the C functions and context for receiving objects.
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.
Retrieve all objects from the channel and send it to the receiver.

dnsjit.core.thread(3)

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

Maintained by DNS-OARC

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

For issues and feature requests please use:

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

For question and help please use:

admin@dns-oarc.net
1.2.3 dnsjit