STREAMS-UX Programmer's Guide (February 2007)

Synchronization Levels
NOSYNC Level synchronization
Appendix F
286
Multiple instances of ECHO-A's echo_wput and a single instance of echo_wsrv procedures.
Any of ECHO-A's procedures with any of ECHO-B, DLPI-A, or SAD-A's procedures.
If a module uses NOSYNC synchronization, STREAMS/UX can concurrently execute multiple instances of a
queue's put procedure and a single instance of the same queue's service procedure. This necessitates that the
modules protect the module-specific data that has to be shared between multiple instances of the put
procedures, or between the put and the service procedures. For more information on using NOSYNC
synchronization with STREAMS modules and drivers, refer to <$elemtext> on page 65 in Chapter 4.
STREAMS/UX does not guarantee the order of messages coming out of the modules/drivers using NOSYNC
synchronization, because it has no control of the execution order when multiple instances of the put and
service procedures are executed simultaneously. If the order of the messages matter, than the modules/drivers
should device their own mechanisms to achieve it.
STREAMS/UX in general will maintain the integrity of its private data structures. However when certain
operations manipulating the queue directly namely insq(), rmvq(), strqset() and strqget() are to be used in a
module/driver using NOSYNC synchronization, an explicit call to freezestr() is necessary to maintain the
integrity of the STREAMS data structures.
Refer to Appendix G, “STREAMS Commands, for more details on these utilities.