This primitive is usually used a directive in the source code of the module to be locked.
A module locked with lock_pass/1 can be unlocked using unlock/2, and giving the same pass-string that was used in locking. The pass-string can be changed by calling lock_pass/1 again from within the module.
% After compiling the following code:
:- module(m).
:- export pub/0.
pub :- writeln(pub).
priv :- writeln(priv).
:- lock_pass("secret").
?- module(m).
trying to access a locked module in module(m)
?- call(pub) @ m.
pub
yes.
?- call(priv) @ m.
trying to access a locked module in priv
?- assert(foo) @ m.
trying to access a locked module in assert_(foo, m)
?- unlock(m, "secret").
yes.
?- call(priv) @ m.
priv
yes.
?- assert(foo) @ m.
yes.