XPCOM Thread Synchronization 编辑

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.

Quick reference: Difference between nsAutoLock API and new API

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();
  }

 

Mozilla Synchronization API reference

The mozilla:: namespace exports the following synchronization primitives.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

词条统计

浏览:56 次

字数:3581

最后编辑:7年前

编辑次数:0 次

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文