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

FreeBSD Manual Pages

  
 
  

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
	      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 chan-
	      nel.

       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 chan-
	      nel does.

       Channel:run()
	      Retrieve	all  objects  from  the	channel	and send it to the re-
	      ceiver.

SEE ALSO
       dnsjit.core.thread(3)

AUTHORS	and CONTRIBUTORS
       Jerry Lundstrm (DNS-OARC), Tom Kek (CZ.NIC), Petr  paek (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+14.3.quarterly>

home | help