我在内存模式下使用我的程序运行SQLite v3.7.17 并使用共享缓存(在共享缓存和内存数据库中指定).我的程序是多线程的,所有这些线程都访问相同的内存数据库.
有没有什么方法可以配置或使用我的SQLite数据库,这样,当两个线程update在同一个表(但不同的行)上运行查询时,一个不等待另一个?也就是说,如何在内存数据库中实现行级锁定?
理论上这应该是可能的,因为我的SQLite数据不在文件中(因此文件系统写入不适用).
在Java库中,Collection接口不扩展Cloneable和Serializable接口的原因是什么?
这是我运行的代码:
package main
import (
"fmt"
"time"
)
const delay = 9 * time.Millisecond
func main() {
n := 0
go func() {
time.Sleep(delay)
n++
}()
fmt.Println(n)
}
Run Code Online (Sandbox Code Playgroud)
这是我使用的命令:
go run -race data_race_demo.go
Run Code Online (Sandbox Code Playgroud)
这是我注意到的行为:
delay设定为9ms或更低,种族数据一直检测(程序引发Found 1 data race(s))delay设定为12毫秒以上,种族数据从未检测(程序简单的打印0)delay设置为10至11毫秒,数据争用间断地出现(即,有时打印0有时抛出Found 1 data race(s))为什么会在 10-11ms 左右发生这种情况?
darwin/amd64如果这很重要,我正在使用 Go 1.16.3 。