packageatomic
import(
"unsafe"
)
//BUG(rsC):Onx86-32,the64-bitfunctionsuseinstructionsunavailablebeforethePentiumMMX.
//
//Onnon-LinuxARM,the64-bitfunctionsuseinstructionsunavailablebeforetheARMv6kcore.
//
//OnbothARMANdx86-32,itisthecaller'sresponsibilitytoarrangefor64-bit
//alignmentof64-bitwordsaccessedatomically.Thefirstwordinaglobal
//variabLeorinanallocatedstructorslicecanbereliedupontobe
//64-bitaligned.
//SwapInt32atomicallystoresnewinto*addrandreturnstheprevIoUs*addrvalue.
funcSwapInt32(addr*int32,newint32)(oldint32)
//SwapInt64atomicallystoresnewinto*addrandreturnstheprevIoUs*addrvalue.
funcSwapInt64(addr*int64,newint64)(oldint64)
//SwapUint32atomicallystoresnewinto*addrandreturnstheprevIoUs*addrvalue.
funcSwapUint32(addr*uint32,newuint32)(olduint32)
//SwapUint64atomicallystoresnewinto*addrandreturnstheprevIoUs*addrvalue.
funcSwapUint64(addr*uint64,newuint64)(olduint64)
//SwapUintptratomicallystoresnewinto*addrandreturnstheprevIoUs*addrvalue.
funcSwapUintptr(addr*uintptr,newuintptr)(olduintptr)
//SwapPointeratomicallystoresnewinto*addrandreturnstheprevIoUs*addrvalue.
funcSwapPointer(addr*unsafe.Pointer,newunsafe.Pointer)(oldunsafe.Pointer)
//CompareAndSwapInt32executesthecompare-and-swapoperationforanint32value.
funcCompareAndSwapInt32(addr*int32,old,newint32)(swappedbool)
//CompareAndSwapInt64executesthecompare-and-swapoperationforanint64value.
funcCompareAndSwapInt64(addr*int64,newint64)(swappedbool)
//CompareAndSwapUint32executesthecompare-and-swapoperationforauint32value.
funcCompareAndSwapUint32(addr*uint32,newuint32)(swappedbool)
//CompareAndSwapUint64executesthecompare-and-swapoperationforauint64value.
funcCompareAndSwapUint64(addr*uint64,newuint64)(swappedbool)
//CompareAndSwapUintptrexecutesthecompare-and-swapoperationforauintptrvalue.
funcCompareAndSwapUintptr(addr*uintptr,newuintptr)(swappedbool)
//CompareAndSwapPointerexecutesthecompare-and-swapoperationforaunsafe.Pointervalue.
funcCompareAndSwapPointer(addr*unsafe.Pointer,newunsafe.Pointer)(swappedbool)
//AddInt32atomicallyaddsdeltato*addrandreturnsthenewvalue.
funcAddInt32(addr*int32,deltaint32)(newint32)
//AddUint32atomicallyaddsdeltato*addrandreturnsthenewvalue.
//Tosubtractasignedpositiveconstantvaluecfromx,doAddUint32(&x,^uint32(c-1)).
//Inparticular,todecrementx,^uint32(0)).
funcAddUint32(addr*uint32,deltauint32)(newuint32)
//AddInt64atomicallyaddsdeltato*addrandreturnsthenewvalue.
funcAddInt64(addr*int64,deltaint64)(newint64)
//AddUint64atomicallyaddsdeltato*addrandreturnsthenewvalue.
//Tosubtractasignedpositiveconstantvaluecfromx,doAddUint64(&x,^uint64(c-1)).
//Inparticular,^uint64(0)).
funcAddUint64(addr*uint64,deltauint64)(newuint64)
//AddUintptratomicallyaddsdeltato*addrandreturnsthenewvalue.
funcAddUintptr(addr*uintptr,deltauintptr)(newuintptr)
//LoadInt32atomicallyloads*addr.
funcLoadInt32(addr*int32)(valint32)
//LoadInt64atomicallyloads*addr.
funcLoadInt64(addr*int64)(valint64)
//LoadUint32atomicallyloads*addr.
funcLoadUint32(addr*uint32)(valuint32)
//LoadUint64atomicallyloads*addr.
funcLoadUint64(addr*uint64)(valuint64)
//LoadUintptratomicallyloads*addr.
funcLoadUintptr(addr*uintptr)(valuintptr)
//LoadPointeratomicallyloads*addr.
funcLoadPointer(addr*unsafe.Pointer)(valunsafe.Pointer)
//StoreInt32atomicallystoresvalinto*addr.
funcStoreInt32(addr*int32,valint32)
//StoreInt64atomicallystoresvalinto*addr.
funcStoreInt64(addr*int64,valint64)
//StoreUint32atomicallystoresvalinto*addr.
funcStoreUint32(addr*uint32,valuint32)
//StoreUint64atomicallystoresvalinto*addr.
funcStoreUint64(addr*uint64,valuint64)
//StoreUintptratomicallystoresvalinto*addr.
funcStoreUintptr(addr*uintptr,valuintptr)
//StorePointeratomicallystoresvalinto*addr.
funcStorePointer(addr*unsafe.Pointer,valunsafe.Pointer)
//HelperforARm.Linkerwilldiscardonothersystems
funcpanic64(){
panic("sync/atomic:broken64-bitatomicoperations(buggyQEMU)")
}
所有这些操作都是atomic,原子执行的操作,golang底层实
比如:
swap函数相当于(并且是原子执行的):
old = *addr
*addr = new
return old
大佬总结
以上是大佬教程为你收集整理的golang原子库atomic全部内容,希望文章能够帮你解决golang原子库atomic所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。