32 lines
514 B
Go
32 lines
514 B
Go
package custom_rwmutex
|
|
|
|
import "sync"
|
|
|
|
type CustomRwMutex struct {
|
|
mu *sync.RWMutex
|
|
}
|
|
|
|
func NewCustomRwMutex() *CustomRwMutex {
|
|
return &CustomRwMutex{
|
|
mu: &sync.RWMutex{},
|
|
}
|
|
}
|
|
|
|
func (rwMu *CustomRwMutex) WriteHandler(fn func() error) error {
|
|
rwMu.mu.Lock()
|
|
defer rwMu.mu.Unlock()
|
|
if err := fn(); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (rwMu *CustomRwMutex) ReadHandler(fn func() error) error {
|
|
rwMu.mu.RLock()
|
|
defer rwMu.mu.RUnlock()
|
|
if err := fn(); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|