![]() |
![]() HP OpenVMS Systemsask the wizard |
![]() |
The Question is: Im writing a linker library (in C) that contains misc OS dependant routines. This library should be used on both unix and vms. A part of this library is lock functions. On unix semaphores are used and on vms I use the sys$enq system service. Since shared semaphore sets on unix ain't removed when the last process stops using them Ive added an argument to my "allocate lock function" that lets you specify if the lock should be created if it doesn't exist and in my "free lock" function Ive got an argument tha t lets you specify if the lock should be removed from the system or just freed. The big question is: Can I accomplish something similar on VMS? Ive been thinking bout using sys$getlkiw to get information on how many processes that has qued the resource bu t since I have to do a sys$enq() before I call sys$getlkiw() (to get the lockid...or is there another way?) there might be other processes doing the same thing at that time and....well.... The Answer is : OpenVMS automatically creates the requested lock, if it does not exist. OpenVMS cleans up process-level locks automatically as part of process rundown processing, unless the individual locks are marked as system-owned locks (as differentiated from system-wide locks). OpenVMS locks can be formed into trees of locks, such that each semaphore set could be implemented as a tree of locks. If you are operating across UIC groups, you will want to use system-wide locks, and potentially a lock resource domain. (By default, process-level locks and lock resources are maintained separately for each UIC group.)
|