summaryrefslogtreecommitdiff
path: root/src/vm/win32threadpool.cpp
diff options
context:
space:
mode:
authorBen Adams <thundercat@illyriad.co.uk>2016-07-29 18:01:33 +0100
committerBen Adams <thundercat@illyriad.co.uk>2016-08-09 21:00:07 +0100
commitb8220e45b14ea4174e323b1ca7b74ac2fd128e0e (patch)
treedbbc02701c62359aabee3512b725792556a886f6 /src/vm/win32threadpool.cpp
parenta033207e0dbe403473c4c980d9b5646131d84776 (diff)
downloadcoreclr-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.cpp16
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;
}
}