Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  SharedScriptDataTableHolder.h   Sprache: C

 
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*-
 * vim: set ts=8 sts=2 et sw=2 tw=80:
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */


#ifndef vm_SharedScriptDataTableHolder_h
#define vm_SharedScriptDataTableHolder_h

#include "mozilla/Assertions.h"  // MOZ_ASSERT
#include "mozilla/Maybe.h"       // mozilla::Maybe

#include "threading/Mutex.h"   // js::Mutex
#include "vm/SharedStencil.h"  // js::SharedImmutableScriptDataTable

namespace js {

class AutoLockGlobalScriptData {
  static js::Mutex mutex_;

 public:
  AutoLockGlobalScriptData();
  ~AutoLockGlobalScriptData();
};

// A class to provide an access to SharedImmutableScriptDataTable,
// with or without a mutex lock.
//
// js::globalSharedScriptDataTableHolder singleton can be used by any thread,
// and it needs a mutex lock.
//
//   AutoLockGlobalScriptData lock;
//   auto& table = js::globalSharedScriptDataTableHolder::get(lock);
//
// Private SharedScriptDataTableHolder instance can be created for thread-local
// storage, and it can be configured not to require a mutex lock.
//
//   SharedScriptDataTableHolder holder(
//     SharedScriptDataTableHolder::NeedsLock::No);
//   ...
//   auto& table = holder.getWithoutLock();
//
// getMaybeLocked method can be used for both type of instances.
//
//   Maybe<AutoLockGlobalScriptData> lock;
//   auto& table = holder.getMaybeLocked(lock);
//
// Private instance is supposed to be held by the each JSRuntime, including
// both main thread runtime and worker thread runtime, and used in for
// non-helper-thread compilation.
//
// js::globalSharedScriptDataTableHolder singleton is supposed to be used by
// all helper-thread compilation.
class SharedScriptDataTableHolder {
  bool needsLock_ = true;
  js::SharedImmutableScriptDataTable scriptDataTable_;

 public:
  enum class NeedsLock { No, Yes };

  explicit SharedScriptDataTableHolder(NeedsLock needsLock = NeedsLock::Yes)
      : needsLock_(needsLock == NeedsLock::Yes) {}

  js::SharedImmutableScriptDataTable& get(
      const js::AutoLockGlobalScriptData& lock) {
    MOZ_ASSERT(needsLock_);
    return scriptDataTable_;
  }

  js::SharedImmutableScriptDataTable& getWithoutLock() {
    MOZ_ASSERT(!needsLock_);
    return scriptDataTable_;
  }

  js::SharedImmutableScriptDataTable& getMaybeLocked(
      mozilla::Maybe<js::AutoLockGlobalScriptData>& lock) {
    if (needsLock_) {
      lock.emplace();
    }
    return scriptDataTable_;
  }
};

extern SharedScriptDataTableHolder globalSharedScriptDataTableHolder;

/* namespace js */

#endif /* vm_SharedScriptDataTableHolder_h */

Messung V0.5
C=88 H=97 G=92

¤ Dauer der Verarbeitung: 0.3 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge