dnsjit.core.channel - Man Page

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

Bugs

For issues and feature requests please use:

For question and help please use:

admin@dns-oarc.net

Referenced By

dnsjit.core(3), dnsjit.core.thread(3).

1.5.0 dnsjit