{
  "code": null,
  "collection": "architecture",
  "href": "https://banes-lab.com/ontology#architecture-concurrency-control",
  "id": "concurrency-control",
  "kind": "mechanism",
  "layer": {
    "href": "https://banes-lab.com/ontology/schema#layer-atomic-boundary",
    "json": "https://banes-lab.com/json/records/layer/atomic-boundary",
    "label": "Atomic Boundary",
    "markdown": "https://banes-lab.com/records/layer/atomic-boundary.md",
    "ref": "layer:atomic-boundary"
  },
  "name": "Concurrency Control",
  "ref": "architecture:concurrency-control",
  "relations": [
    {
      "links": [
        {
          "href": "https://banes-lab.com/ontology/lexicon#lexicon-shared-state-identification",
          "json": "https://banes-lab.com/json/records/lexicon/shared-state-identification",
          "label": "Shared State Identification",
          "markdown": "https://banes-lab.com/records/lexicon/shared-state-identification.md",
          "ref": "lexicon:shared-state-identification"
        }
      ],
      "relation": "requires"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/ontology#architecture-isolation",
          "json": "https://banes-lab.com/json/records/architecture/isolation",
          "label": "Isolation",
          "markdown": "https://banes-lab.com/records/architecture/isolation.md",
          "ref": "architecture:isolation"
        },
        {
          "href": "https://banes-lab.com/ontology#architecture-correctness",
          "json": "https://banes-lab.com/json/records/architecture/correctness",
          "label": "Correctness",
          "markdown": "https://banes-lab.com/records/architecture/correctness.md",
          "ref": "architecture:correctness"
        }
      ],
      "relation": "reinforces"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/ontology/lexicon#lexicon-safe-parallel-mutation",
          "json": "https://banes-lab.com/json/records/lexicon/safe-parallel-mutation",
          "label": "Safe Parallel Mutation",
          "markdown": "https://banes-lab.com/records/lexicon/safe-parallel-mutation.md",
          "ref": "lexicon:safe-parallel-mutation"
        }
      ],
      "relation": "enables"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/ontology/lexicon#lexicon-race-conditions",
          "json": "https://banes-lab.com/json/records/lexicon/race-conditions",
          "label": "Race Conditions",
          "markdown": "https://banes-lab.com/records/lexicon/race-conditions.md",
          "ref": "lexicon:race-conditions"
        },
        {
          "href": "https://banes-lab.com/ontology#architecture-lost-update",
          "json": "https://banes-lab.com/json/records/architecture/lost-update",
          "label": "Lost Update",
          "markdown": "https://banes-lab.com/records/architecture/lost-update.md",
          "ref": "architecture:lost-update"
        }
      ],
      "relation": "conflicts-with"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/ontology/lexicon#lexicon-performance",
          "json": "https://banes-lab.com/json/records/lexicon/performance",
          "label": "Performance",
          "markdown": "https://banes-lab.com/records/lexicon/performance.md",
          "ref": "lexicon:performance"
        }
      ],
      "relation": "tensions-with"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/ontology/schema#tension-concurrency-control-performance",
          "json": "https://banes-lab.com/json/records/tension/concurrency-control-performance",
          "label": "Concurrency Control / Performance",
          "markdown": "https://banes-lab.com/records/tension/concurrency-control-performance.md",
          "ref": "tension:concurrency-control-performance"
        }
      ],
      "relation": "tensions"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/ontology/lexicon#lexicon-race-conditions",
          "json": "https://banes-lab.com/json/records/lexicon/race-conditions",
          "label": "Race Conditions",
          "markdown": "https://banes-lab.com/records/lexicon/race-conditions.md",
          "ref": "lexicon:race-conditions"
        }
      ],
      "relation": "violated-by"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/ontology#architecture-pessimistic-locking",
          "json": "https://banes-lab.com/json/records/architecture/pessimistic-locking",
          "label": "Pessimistic Locking",
          "markdown": "https://banes-lab.com/records/architecture/pessimistic-locking.md",
          "ref": "architecture:pessimistic-locking"
        },
        {
          "href": "https://banes-lab.com/ontology/lexicon#lexicon-make-immutable",
          "json": "https://banes-lab.com/json/records/lexicon/make-immutable",
          "label": "Make Immutable",
          "markdown": "https://banes-lab.com/records/lexicon/make-immutable.md",
          "ref": "lexicon:make-immutable"
        },
        {
          "href": "https://banes-lab.com/ontology#architecture-optimistic-locking",
          "json": "https://banes-lab.com/json/records/architecture/optimistic-locking",
          "label": "Optimistic Locking",
          "markdown": "https://banes-lab.com/records/architecture/optimistic-locking.md",
          "ref": "architecture:optimistic-locking"
        }
      ],
      "relation": "refactored-by"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/ontology/schema#vocabulary-severity-mandatory",
          "json": "https://banes-lab.com/json/records/vocabulary/severity-mandatory",
          "label": "mandatory",
          "markdown": "https://banes-lab.com/records/vocabulary/severity-mandatory.md",
          "ref": "vocabulary:severity-mandatory"
        }
      ],
      "relation": "severity"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/ontology#architecture-category-transactions-state-concurrency",
          "json": "https://banes-lab.com/json/records/architecture-category/transactions-state-concurrency",
          "label": "Transactions / State / Concurrency",
          "markdown": "https://banes-lab.com/records/architecture-category/transactions-state-concurrency.md",
          "ref": "architecture-category:transactions-state-concurrency"
        }
      ],
      "relation": "category"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/ontology#architecture-concurrency",
          "json": "https://banes-lab.com/json/records/architecture/concurrency",
          "label": "Concurrency",
          "markdown": "https://banes-lab.com/records/architecture/concurrency.md",
          "ref": "architecture:concurrency"
        }
      ],
      "relation": "required-by"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/disciplined-methodology/collaborate#coordination-is-software",
          "json": "https://banes-lab.com/json/disciplined-methodology/collaborate/coordination-is-software",
          "label": "Coordination is software",
          "markdown": "https://banes-lab.com/disciplined-methodology/collaborate/coordination-is-software.md",
          "ref": "chapter:/disciplined-methodology/collaborate#coordination-is-software"
        },
        {
          "href": "https://banes-lab.com/ontology#architecture-category-anti-patterns",
          "json": "https://banes-lab.com/json/ontology/principles/architecture-category-anti-patterns",
          "label": "Anti-patterns",
          "markdown": "https://banes-lab.com/ontology/principles/architecture-category-anti-patterns.md",
          "ref": "chapter:/ontology#architecture-category-anti-patterns"
        },
        {
          "href": "https://banes-lab.com/ontology#architecture-category-correctness-determinism-verification",
          "json": "https://banes-lab.com/json/ontology/principles/architecture-category-correctness-determinism-verification",
          "label": "Correctness / Determinism / Verification",
          "markdown": "https://banes-lab.com/ontology/principles/architecture-category-correctness-determinism-verification.md",
          "ref": "chapter:/ontology#architecture-category-correctness-determinism-verification"
        },
        {
          "href": "https://banes-lab.com/ontology#architecture-category-scalability-performance-optimization",
          "json": "https://banes-lab.com/json/ontology/principles/architecture-category-scalability-performance-optimization",
          "label": "Scalability / Performance / Optimization",
          "markdown": "https://banes-lab.com/ontology/principles/architecture-category-scalability-performance-optimization.md",
          "ref": "chapter:/ontology#architecture-category-scalability-performance-optimization"
        },
        {
          "href": "https://banes-lab.com/ontology#architecture-category-transactions-state-concurrency",
          "json": "https://banes-lab.com/json/ontology/principles/architecture-category-transactions-state-concurrency",
          "label": "Transactions / State / Concurrency",
          "markdown": "https://banes-lab.com/ontology/principles/architecture-category-transactions-state-concurrency.md",
          "ref": "chapter:/ontology#architecture-category-transactions-state-concurrency"
        },
        {
          "href": "https://banes-lab.com/ontology/lexicon#lexicon-category-core-vocabulary",
          "json": "https://banes-lab.com/json/ontology/lexicon/lexicon-category-core-vocabulary",
          "label": "Core Vocabulary",
          "markdown": "https://banes-lab.com/ontology/lexicon/lexicon-category-core-vocabulary.md",
          "ref": "chapter:/ontology/lexicon#lexicon-category-core-vocabulary"
        },
        {
          "href": "https://banes-lab.com/ontology/lexicon#lexicon-category-quality-attributes",
          "json": "https://banes-lab.com/json/ontology/lexicon/lexicon-category-quality-attributes",
          "label": "Quality Attributes",
          "markdown": "https://banes-lab.com/ontology/lexicon/lexicon-category-quality-attributes.md",
          "ref": "chapter:/ontology/lexicon#lexicon-category-quality-attributes"
        },
        {
          "href": "https://banes-lab.com/ontology/lexicon#lexicon-category-transactions-state-concurrency",
          "json": "https://banes-lab.com/json/ontology/lexicon/lexicon-category-transactions-state-concurrency",
          "label": "Transactions / State / Concurrency",
          "markdown": "https://banes-lab.com/ontology/lexicon/lexicon-category-transactions-state-concurrency.md",
          "ref": "chapter:/ontology/lexicon#lexicon-category-transactions-state-concurrency"
        },
        {
          "href": "https://banes-lab.com/ontology/schema#the-vocabulary-severity",
          "json": "https://banes-lab.com/json/ontology/schema/the-vocabulary-severity",
          "label": "Severity levels",
          "markdown": "https://banes-lab.com/ontology/schema/the-vocabulary-severity.md",
          "ref": "chapter:/ontology/schema#the-vocabulary-severity"
        },
        {
          "href": "https://banes-lab.com/ontology/schema#the-resolutions",
          "json": "https://banes-lab.com/json/ontology/schema/the-resolutions",
          "label": "The resolutions",
          "markdown": "https://banes-lab.com/ontology/schema/the-resolutions.md",
          "ref": "chapter:/ontology/schema#the-resolutions"
        }
      ],
      "relation": "linked-from"
    }
  ],
  "summary": "A mechanism that coordinates concurrent access to shared state, through locks, versions or compare-and-swap.",
  "siblings": {
    "next": {
      "href": "https://banes-lab.com/ontology#architecture-optimistic-locking",
      "json": "https://banes-lab.com/json/records/architecture/optimistic-locking",
      "label": "Optimistic Locking",
      "markdown": "https://banes-lab.com/records/architecture/optimistic-locking.md",
      "ref": "architecture:optimistic-locking"
    },
    "previous": {
      "href": "https://banes-lab.com/ontology#architecture-isolation",
      "json": "https://banes-lab.com/json/records/architecture/isolation",
      "label": "Isolation",
      "markdown": "https://banes-lab.com/records/architecture/isolation.md",
      "ref": "architecture:isolation"
    }
  },
  "up": {
    "href": null,
    "json": "https://banes-lab.com/json/api/records/architecture",
    "label": "Architecture principles",
    "markdown": "https://banes-lab.com/api/records/architecture.md",
    "ref": "api:records/architecture"
  },
  "aliases": [],
  "exemplar": {
    "after": "await fooStore.update(id, current => ({\n  ...current,\n  count: current.count + 1,\n}), { expectedVersion: foo.version });",
    "before": "const foo = await fooStore.find(id);\nawait fooStore.save({ ...foo, count: foo.count + 1 });",
    "lang": "ts",
    "medium": "code"
  },
  "formedBy": null,
  "scope": [
    "transaction",
    "memory",
    "distributed system"
  ],
  "severity": "mandatory"
}
