Skip to content
This repository has been archived by the owner on Jan 23, 2023. It is now read-only.

Remove some unnecessary spinning #21437

Merged
merged 3 commits into from
Dec 8, 2018
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -112,15 +112,13 @@ internal static int RoundUpToPowerOf2(int i)
_frozenForEnqueues = true;

// Increase the tail by FreezeOffset, spinning until we're successful in doing so.
var spinner = new SpinWait();
while (true)
{
int tail = Volatile.Read(ref _headAndTail.Tail);
if (Interlocked.CompareExchange(ref _headAndTail.Tail, tail + FreezeOffset, tail) == tail)
{
break;
}
spinner.SpinOnce();
}
}
}
Expand Down
6 changes: 0 additions & 6 deletions src/System.Private.CoreLib/src/System/Threading/Tasks/Task.cs
Original file line number Diff line number Diff line change
Expand Up @@ -721,7 +721,6 @@ internal bool AtomicStateUpdate(int newBits, int illegalBits)

private bool AtomicStateUpdateSlow(int newBits, int illegalBits)
{
var sw = new SpinWait();
do
{
int oldFlags = m_stateFlags;
Expand All @@ -730,13 +729,11 @@ private bool AtomicStateUpdateSlow(int newBits, int illegalBits)
{
return true;
}
sw.SpinOnce();
} while (true);
}

internal bool AtomicStateUpdate(int newBits, int illegalBits, ref int oldFlags)
{
SpinWait sw = new SpinWait();
do
{
oldFlags = m_stateFlags;
Expand All @@ -745,7 +742,6 @@ internal bool AtomicStateUpdate(int newBits, int illegalBits, ref int oldFlags)
{
return true;
}
sw.SpinOnce();
} while (true);
}

Expand All @@ -772,13 +768,11 @@ internal void SetNotificationForWaitCompletion(bool enabled)
else
{
// Atomically clear the END_AWAIT_NOTIFICATION bit
SpinWait sw = new SpinWait();
while (true)
{
int oldFlags = m_stateFlags;
int newFlags = oldFlags & (~TASK_STATE_WAIT_COMPLETION_NOTIFICATION);
if (Interlocked.CompareExchange(ref m_stateFlags, newFlags, oldFlags) == oldFlags) break;
sw.SpinOnce();
}
}
}
Expand Down