Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(400)

Unified Diff: runtime/vm/thread_barrier.h

Issue 1703383002: - Do not repeatedly allocate and release Monitor objects. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/vm/isolate_test.cc ('k') | runtime/vm/thread_barrier_test.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/thread_barrier.h
diff --git a/runtime/vm/thread_barrier.h b/runtime/vm/thread_barrier.h
index 9cc1d97fc5e92b9c019108b24197e4207b5327b1..39c56a81368cbcac90d6f3e32193f21a32c38c59 100644
--- a/runtime/vm/thread_barrier.h
+++ b/runtime/vm/thread_barrier.h
@@ -46,16 +46,20 @@ namespace dart {
//
class ThreadBarrier {
public:
- explicit ThreadBarrier(intptr_t num_threads)
+ explicit ThreadBarrier(intptr_t num_threads,
+ Monitor* monitor,
+ Monitor* done_monitor)
: num_threads_(num_threads),
+ monitor_(monitor),
remaining_(num_threads),
parity_(false),
+ done_monitor_(done_monitor),
done_(false) {
ASSERT(remaining_ > 0);
}
void Sync() {
- MonitorLocker ml(&monitor_);
+ MonitorLocker ml(monitor_);
ASSERT(remaining_ > 0);
if (--remaining_ > 0) {
// I'm not last to arrive; wait until next round.
@@ -75,13 +79,13 @@ class ThreadBarrier {
void Exit() {
bool last = false;
{
- MonitorLocker ml(&monitor_);
+ MonitorLocker ml(monitor_);
ASSERT(remaining_ > 0);
last = (--remaining_ == 0);
}
if (last) {
// Last one to exit sets done_.
- MonitorLocker ml(&done_monitor_);
+ MonitorLocker ml(done_monitor_);
ASSERT(!done_);
done_ = true;
// Tell the destructor in case it's already waiting.
@@ -90,7 +94,7 @@ class ThreadBarrier {
}
~ThreadBarrier() {
- MonitorLocker ml(&done_monitor_);
+ MonitorLocker ml(done_monitor_);
// Wait for everyone to exit before destroying the monitors.
while (!done_) {
ml.Wait();
@@ -101,11 +105,11 @@ class ThreadBarrier {
private:
const intptr_t num_threads_;
- Monitor monitor_;
+ Monitor* monitor_;
intptr_t remaining_;
bool parity_;
- Monitor done_monitor_; // TODO(koda): Try to optimize this away.
+ Monitor* done_monitor_; // TODO(koda): Try to optimize this away.
bool done_;
DISALLOW_COPY_AND_ASSIGN(ThreadBarrier);
« no previous file with comments | « runtime/vm/isolate_test.cc ('k') | runtime/vm/thread_barrier_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698