public ThreadLocalNode(ThreadInt64PersistentCounter counter) { Debug.Assert(counter != null); _count = 1; _counter = counter; }
public ThreadLocalNode(ThreadInt64PersistentCounter counter) { Debug.Assert(counter != null); _counter = counter; _prev = this; _next = this; }
private void NotifyWorkItemProgress(object threadLocalCompletionCountObject, int currentTimeMs) { ThreadInt64PersistentCounter.Increment(threadLocalCompletionCountObject); _separated.lastDequeueTime = currentTimeMs; if (ShouldAdjustMaxWorkersActive(currentTimeMs)) { AdjustMaxWorkersActive(); } }
private void NotifyWorkItemProgress(object threadLocalCompletionCountObject, int currentTimeMs) { ThreadInt64PersistentCounter.Increment(threadLocalCompletionCountObject); Volatile.Write(ref _separated.lastDequeueTime, Environment.TickCount); if (ShouldAdjustMaxWorkersActive(currentTimeMs)) { AdjustMaxWorkersActive(); } }
public void Dispose() { ThreadInt64PersistentCounter counter = _counter; s_lock.Acquire(); try { counter._overflowCount += _count; counter._nodes.Remove(this); } finally { s_lock.Release(); } }
public void Dispose() { ThreadInt64PersistentCounter counter = _counter; counter._lock.Acquire(); try { counter._overflowCount += _count; _prev._next = _next; _next._prev = _prev; } finally { counter._lock.Release(); } }
private void OnIncrementOverflow() { // Accumulate the count for this increment into the overflow count and reset the thread-local count // The lock, in coordination with other places that read these values, ensures that both changes below become // visible together ThreadInt64PersistentCounter counter = _counter; s_lock.Acquire(); try { _count = 0; counter._overflowCount += (long)uint.MaxValue + 1; } finally { s_lock.Release(); } }
private void OnAddOverflow(uint count) { Debug.Assert(count != 0); // Accumulate the count for this add into the overflow count and reset the thread-local count // The lock, in coordination with other places that read these values, ensures that both changes below become // visible together ThreadInt64PersistentCounter counter = _counter; s_lock.Acquire(); try { counter._overflowCount += (long)_count + count; _count = 0; } finally { s_lock.Release(); } }
internal static void IncrementLockContentionCount() => ThreadInt64PersistentCounter.Increment(t_ContentionCountObject ?? CreateThreadLocalContentionCountObject());