我有可共享的对象。我们称之为OBJ。
我很少要更新它。并且能够不加锁定地经常阅读它。
我已经尝试过了:
<presetdef name="ant">
<!-- workaround transfer.* not working in Java EE projects -->
<ant>
<propertyset>
<propertyref prefix="transfer."/>
<mapper from="transfer.*" to="*" type="glob"/>
</propertyset>
</ant>
</presetdef>
在此示例中,真正的可共享对象不是OBJ,而是函数“ secretFunc”。
通过在没有任何锁定的情况下替换secretFunc来完成此技巧,线程/ goroutine是否安全?我想避免使用func Initialize() (func() func() OBJ, func()) {
genFunc := func() func() OBJ {
OBJ := getNewObject()
secretFunc := func() OBJ {
return OBJ
}
return secretFunc
}
secretFunc := genFunc()
timer := time.NewTicker(time.Duration(timeoutSec) * time.Second)
finish := make(chan bool)
go func() {
for {
select {
case <-finish:
close(finish)
return
case <-timer.C:
secretFunc = genFunc()
}
}
}()
retFunc := func() func() OBJ {
return secretFunc
}
shutDownRet := func() {
finish <- true
timer.Stop()
}
return retFunc, shutDownRet
}
和CAS
。
如果这不安全,实现此安全性的模式(如果存在)是什么?