Skip to content

Commit 38d7f22

Browse files
performance: Final optimized shared_mutex with lifetime safety refcounts
1 parent 5c3a426 commit 38d7f22

1 file changed

Lines changed: 30 additions & 16 deletions

File tree

libs/core/synchronization/include/hpx/synchronization/shared_mutex.hpp

Lines changed: 30 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -539,76 +539,90 @@ namespace hpx::detail {
539539

540540
void lock_shared()
541541
{
542-
if (data_->try_lock_shared())
542+
auto data = data_;
543+
if (data->try_lock_shared())
543544
return;
544-
data_->lock_shared();
545+
data->lock_shared();
545546
}
546547

547548
bool try_lock_shared()
548549
{
549-
return data_->try_lock_shared();
550+
auto data = data_;
551+
return data->try_lock_shared();
550552
}
551553

552554
void unlock_shared()
553555
{
554-
if (data_->try_unlock_shared_fast())
556+
auto data = data_;
557+
if (data->try_unlock_shared_fast())
555558
return;
556-
data_->unlock_shared();
559+
data->unlock_shared();
557560
}
558561

559562
void lock()
560563
{
561-
data_->lock();
564+
auto data = data_;
565+
data->lock();
562566
}
563567

564568
bool try_lock()
565569
{
566-
return data_->try_lock();
570+
auto data = data_;
571+
return data->try_lock();
567572
}
568573

569574
void unlock()
570575
{
571-
data_->unlock();
576+
auto data = data_;
577+
data->unlock();
572578
}
573579

574580
void lock_upgrade()
575581
{
576-
data_->lock_upgrade();
582+
auto data = data_;
583+
data->lock_upgrade();
577584
}
578585

579586
bool try_lock_upgrade()
580587
{
581-
return data_->try_lock_upgrade();
588+
auto data = data_;
589+
return data->try_lock_upgrade();
582590
}
583591

584592
void unlock_upgrade()
585593
{
586-
data_->unlock_upgrade();
594+
auto data = data_;
595+
data->unlock_upgrade();
587596
}
588597

589598
void unlock_upgrade_and_lock()
590599
{
591-
data_->unlock_upgrade_and_lock();
600+
auto data = data_;
601+
data->unlock_upgrade_and_lock();
592602
}
593603

594604
void unlock_and_lock_upgrade()
595605
{
596-
data_->unlock_and_lock_upgrade();
606+
auto data = data_;
607+
data->unlock_and_lock_upgrade();
597608
}
598609

599610
void unlock_and_lock_shared()
600611
{
601-
data_->unlock_and_lock_shared();
612+
auto data = data_;
613+
data->unlock_and_lock_shared();
602614
}
603615

604616
bool try_unlock_shared_and_lock()
605617
{
606-
return data_->try_unlock_shared_and_lock();
618+
auto data = data_;
619+
return data->try_unlock_shared_and_lock();
607620
}
608621

609622
void unlock_upgrade_and_lock_shared()
610623
{
611-
data_->unlock_upgrade_and_lock_shared();
624+
auto data = data_;
625+
data->unlock_upgrade_and_lock_shared();
612626
}
613627
};
614628
} // namespace hpx::detail

0 commit comments

Comments
 (0)