The IDL associated with threading is in the ORBLink:ORB
pseudoInterface.
module ORBLink{ pseudo interface ORB : CORBA::ORB { enum thread_policy_type {singly_threaded, thread_per_request}; attribute thread_policy_type thread_policy; }; };
The
enum
statement encodes the fact that there is a type named
ORBLink:thread_policy_type
comprising the keywords
:singly_threaded
and
:thread_per_request
.
Thus:
(typep :singly_threaded 'orblink:thread_policy_type) --> T
The ORB has an attribute named thread_policy
whose value is always a member of that type.
The value of the attribute can be retrieved as follows:
(op:thread_policy corba:orb) --> :THREAD_PER_REQUEST
The value of the attribute can be set using standard setf syntax:
(setf (op:thread_policy corba:orb) :thread_per_request)
Thus, the IDL definitions describe how to access certain values but they do not describe the meaning of the values themselves; that is the purpose of this document.
When the ORB handles an incoming request, it spawns a separate Lisp
thread, an instance of mp:process, if the value of the thread_policy
attribute of
corba:orb
is
:thread_per_request
.
This is the default and
is the recommended settings. If the value of the attribute is set to
:singly_threaded
, however, then the request is executed in the same
thread as was used to read the request from the wire.