sync: Make Monitor.BorrowReturn actually function as intended

This commit is contained in:
Sasha Koshka 2025-09-10 20:53:44 -04:00
parent afcc57aa70
commit c49e33b0c3
2 changed files with 10 additions and 10 deletions

View File

@ -39,12 +39,12 @@ func (this *Monitor[T]) Borrow () (T, func ()) {
// updated value. The intended use of this function is like this:
//
// value, done := monitor.BorrowReturn()
// defer done(value)
func (this *Monitor[T]) BorrowReturn () (T, func (T)) {
// defer done(&value)
func (this *Monitor[T]) BorrowReturn () (T, func (*T)) {
this.mutex.Lock()
return this.value, func (value T) {
return this.value, func (value *T) {
defer this.mutex.Unlock()
this.value = value
this.value = *value
}
}
@ -86,12 +86,12 @@ func (this *RWMonitor[T]) Borrow () (T, func ()) {
// updated value. The intended use of this function is like this:
//
// value, done := monitor.BorrowReturn()
// defer done(value)
func (this *RWMonitor[T]) BorrowReturn () (T, func (T)) {
// defer done(&value)
func (this *RWMonitor[T]) BorrowReturn () (T, func (*T)) {
this.mutex.Lock()
return this.value, func (value T) {
return this.value, func (value *T) {
defer this.mutex.Unlock()
this.value = value
this.value = *value
}
}

View File

@ -13,8 +13,8 @@ func TestMonitor (test *testing.T) {
} ()
func () {
value, done := mon.BorrowReturn()
defer done(&value)
value += 3
defer done(value)
} ()
func () {
value, done := mon.Borrow()
@ -56,8 +56,8 @@ func TestRWMonitor (test *testing.T) {
} ()
func () {
value, done := mon.BorrowReturn()
defer done(&value)
value += 3
defer done(value)
} ()
func () {
value, done := mon.RBorrow()