diff options
author | Ben Adams <thundercat@illyriad.co.uk> | 2016-07-29 18:01:33 +0100 |
---|---|---|
committer | Ben Adams <thundercat@illyriad.co.uk> | 2016-08-09 21:00:07 +0100 |
commit | b8220e45b14ea4174e323b1ca7b74ac2fd128e0e (patch) | |
tree | dbbc02701c62359aabee3512b725792556a886f6 /src/vm/win32threadpool.cpp | |
parent | a033207e0dbe403473c4c980d9b5646131d84776 (diff) | |
download | coreclr-b8220e45b14ea4174e323b1ca7b74ac2fd128e0e.tar.gz coreclr-b8220e45b14ea4174e323b1ca7b74ac2fd128e0e.tar.bz2 coreclr-b8220e45b14ea4174e323b1ca7b74ac2fd128e0e.zip |
Adjust fences and add padding
Diffstat (limited to 'src/vm/win32threadpool.cpp')
-rw-r--r-- | src/vm/win32threadpool.cpp | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/src/vm/win32threadpool.cpp b/src/vm/win32threadpool.cpp index 3696ad5f37..0df0f1e19e 100644 --- a/src/vm/win32threadpool.cpp +++ b/src/vm/win32threadpool.cpp @@ -95,9 +95,12 @@ LONG ThreadpoolMgr::cpuUtilizationAverage = 0; HillClimbing ThreadpoolMgr::HillClimbingInstance; -Volatile<LONG> ThreadpoolMgr::PriorCompletedWorkRequests = 0; -Volatile<DWORD> ThreadpoolMgr::PriorCompletedWorkRequestsTime; -Volatile<DWORD> ThreadpoolMgr::NextCompletedWorkRequestsTime; +BYTE ThreadpoolMgr::padding1[64]; +LONG ThreadpoolMgr::PriorCompletedWorkRequests = 0; +DWORD ThreadpoolMgr::PriorCompletedWorkRequestsTime; +DWORD ThreadpoolMgr::NextCompletedWorkRequestsTime; +BYTE ThreadpoolMgr::padding2[64]; + LARGE_INTEGER ThreadpoolMgr::CurrentSampleStartTime; int ThreadpoolMgr::ThreadAdjustmentInterval; @@ -1189,7 +1192,7 @@ void ThreadpoolMgr::AdjustMaxWorkersActive() DWORD currentTicks = GetTickCount(); LONG totalNumCompletions = Thread::GetTotalThreadPoolCompletionCount(); - LONG numCompletions = totalNumCompletions - PriorCompletedWorkRequests; + LONG numCompletions = totalNumCompletions - VolatileLoad(&PriorCompletedWorkRequests); LARGE_INTEGER startTime = CurrentSampleStartTime; LARGE_INTEGER endTime; @@ -1251,9 +1254,10 @@ void ThreadpoolMgr::AdjustMaxWorkersActive() } } - PriorCompletedWorkRequests = totalNumCompletions; + // Memory fences below writes + VolatileStore(&PriorCompletedWorkRequests, totalNumCompletions); PriorCompletedWorkRequestsTime = currentTicks; - NextCompletedWorkRequestsTime = PriorCompletedWorkRequestsTime + ThreadAdjustmentInterval; + NextCompletedWorkRequestsTime = currentTicks + ThreadAdjustmentInterval; CurrentSampleStartTime = endTime; } } |