XPCOM thread synchronization primitives have the same semantics as those in NSPR, and each method of these synchronization objects (e.g. Mutex::Lock()) has a matching function in NSPR (PR_Lock()). This is no accident, as mozilla:: primitives are merely bare-minimum wrappers around NSPR's.
This article covers the API of Mozilla synchronization only. For a higher-level introduction to thread synchronization, see Introduction_to_NSPR.
Old construction
Note: This is deprecated code that is shown only to compare with approved code. PRLock* mLock;
PRMonitor* mMonitor;
PRCondVar* mCvar;
FooConstructor() {
}
nsresult Init() {
mLock = nsAutoLock::NewLock("Foo lock");
// check for null
mMonitor = nsAutoMonitor::NewMonitor("Foo monitor");
// check for null
mCvar = PR_NewCondVar(mRawLock);
// check for null
// ...
}
| New Construction
using namespace mozilla;
Mutex mLock;
Monitor mMonitor;
CondVar mCvar;
FooConstructor()
: mLock("Foo lock"),
mMonitor("Foo monitor"),
mCvar(mLock, "Foo condvar") {
}
nsresult Init() {
// ...
}
|
Old Usage
Note: This is deprecated code that is shown only to compare with approved code. ConcurrentMethod() {
nsAutoLock al(mLock);
nsAutoMonitor am(mMonitor);
if (needExpensiveComputation()) {
nsAutoUnlock au(mLock);
}
am.Wait();
PR_NotifyCondVar(mCvar);
}
| New Usage
using namespace mozilla;
ConcurrentMethod() {
MutexAutoLock al(mLock);
MonitorAutoEnter am(mMonitor);
if (needExpensiveComputation()) {
MutexAutoUnlock au(mLock);
}
am.Wait();
mCvar->Notify();
}
|
The mozilla:: namespace exports the following synchronization primitives.