  Designing DECthreads queue-based application? 
 The Question is:
 
I am implementing an application using  DECthreads which employs the "Boss
Worker" model.  The "Boss(es)" places tasks in a  queue and workers remove
them.  I  am currently weighing the alternatives between writing my own
queue procedures or using the PPL
$...WORK_QUEUE services. Obviously I'd prefer to use the PPL$ services,
however the documentation is somewhat scetchy..... What happens to the items
held by the  PPL$...WORK_QUE if all processes attached to the que are
terminated.  Will OpenVMS maintain t
hat queue, no matter what, until all items have been removed?  Even if the
machine has been rebooted?
Thanx for any advice.....John E. Frank
 
 
 The Answer is:
 
This Wizard thinks that you are working across purposes:  using PPL work queues
(which were designed to be used to communicate between -processes-) simply to
communicate between threads is like trying to drive a nail with a sledgehammer
the size of a small truck.
 
Beyond that, the PPL library has been retired, so you may find that you have
more difficulties using it than those involving just the documentation.
 
This Wizard would recommend that you write your own queuing package.  It's a
straightforward exercise, requiring a mutex and a condition variable or two.
(Or, you can investigate using the now-obsoleted, but still available, "CMA
Library" queue package (e.g., cma_lib_queue_dequeue()) -- see an old version
of the DECthreads documentation.)  Existing routines potentially useful here
include the global section system service calls and the various RTL routines
available for (interlocked) queue management.
 
However, it sounds like perhaps you have some unstated requirements around the
lifetime of the items in the queue (such as whether they will survive process
termination or system reboot).  If this is in fact the case, then you will want
to pursue a more robust mechanism (a memory-mapped file at least, or perhaps
some sort of transaction monitor or router).
 
Related examples of global sections:
  http://www.partner.digital.com/www-swdev/pages/Home/TECH/faqs/ovms/ovms.html
 
Queue routines:
  lib$insqhi, lib$remqti, etc.
