<htmlxmlns="http://www.w3.org/1999/xhtml"><head><title>Concurrency__StarvationDomain (infer.Concurrency__StarvationDomain)</title><linkrel="stylesheet"href="../../odoc.css"/><metacharset="utf-8"/><metaname="generator"content="odoc 1.5.0"/><metaname="viewport"content="width=device-width,initial-scale=1.0"/><scriptsrc="../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><divclass="content"><header><nav><ahref="../index.html">Up</a>–<ahref="../index.html">infer</a>» Concurrency__StarvationDomain</nav><h1>Module <code>Concurrency__StarvationDomain</code></h1></header><divclass="spec module"id="module-F"><ahref="#module-F"class="anchor"></a><code><spanclass="keyword">module</span> F = Stdlib.Format</code></div><dl><dtclass="spec module"id="module-ThreadDomain"><ahref="#module-ThreadDomain"class="anchor"></a><code><spanclass="keyword">module</span><ahref="ThreadDomain/index.html">ThreadDomain</a> : <spanclass="keyword">sig</span> ... <spanclass="keyword">end</span></code></dt><dd><p>Domain for thread-type. The main goals are</p></dd></dl><dl><dtclass="spec module"id="module-Lock"><ahref="#module-Lock"class="anchor"></a><code><spanclass="keyword">module</span><ahref="Lock/index.html">Lock</a> : <spanclass="keyword">sig</span> ... <spanclass="keyword">end</span></code></dt><dd><p>Abstract address for a lock. There are two notions of equality:</p></dd></dl><divclass="spec module"id="module-Event"><ahref="#module-Event"class="anchor"></a><code><spanclass="keyword">module</span><ahref="Event/index.html">Event</a> : <spanclass="keyword">sig</span> ... <spanclass="keyword">end</span></code></div><divclass="spec module"id="module-LockState"><ahref="#module-LockState"class="anchor"></a><code><spanclass="keyword">module</span><ahref="LockState/index.html">LockState</a> : <ahref="../Absint/AbstractDomain/index.html#module-type-WithTop">Absint.AbstractDomain.WithTop</a></code></div><dl><dtclass="spec module"id="module-Acquisition"><ahref="#module-Acquisition"class="anchor"></a><code><spanclass="keyword">module</span><ahref="Acquisition/index.html">Acquisition</a> : <spanclass="keyword">sig</span> ... <spanclass="keyword">end</span></code></dt><dd><p>a lock acquisition with location information</p></dd></dl><dl><dtclass="spec module"id="module-Acquisitions"><ahref="#module-Acquisitions"class="anchor"></a><code><spanclass="keyword">module</span><ahref="Acquisitions/index.html">Acquisitions</a> : <spanclass="keyword">sig</span> ... <spanclass="keyword">end</span></code></dt><dd><p>A set of lock acquisitions with source locations and procnames.</p></dd></dl><dl><dtclass="spec module"id="module-CriticalPairElement"><ahref="#module-CriticalPairElement"class="anchor"></a><code><spanclass="keyword">module</span><ahref="CriticalPairElement/index.html">CriticalPairElement</a> : <spanclass="keyword">sig</span> ... <spanclass="keyword">end</span></code></dt><dd><p>An event and the currently-held locks at the time it occurred.</p></dd></dl><dl><dtclass="spec module"id="module-CriticalPair"><ahref="#module-CriticalPair"class="anchor"></a><code><spanclass="keyword">module</span><ahref="CriticalPair/index.html">CriticalPair</a> : <spanclass="keyword">sig</span> ... <spanclass="keyword">end</span></code></dt><dd><p>A <code>CriticalPairElement</code> equipped with a call stack. The intuition is that if we have a critical pair `(locks, event)` in the summary of a method then there is a trace of that method where `event` occurs, and right before it occurs the locks held are exactly `locks` (no over/under approximation). We call it "critical" because the information here alone determines deadlock conditions.</p></dd></dl><divclass="spec module"id="module-CriticalPairs"><ahref="#module-CriticalPairs"class="anchor"></a><code><spanclass="keyword">module</span> CriticalPairs : <ahref="../Absint/AbstractDomain/index.html#module-type-FiniteSetS">Absint.AbstractDomain.FiniteSetS</a><spanclass="keyword">with<