Skip site navigation (1)Skip section navigation (2)

  
 
  

home | help
dnsjit.core.channel(3)	    Library Functions Manual	  dnsjit.core.channel(3)

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  ca-
	    pacity  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 LundstrA<paragraph>m (DNS-OARC),  TomA!A!  KAAA3/4ek  (CZ.NIC),  Petr
     A paAek (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

dnsjit				      1.4.0		  dnsjit.core.channel(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=dnsjit.core.channel&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help