Golang写文件默认线程安全吗

tgyf007 · · 1725 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

我写了一个脚本测试并发写入文件,发现虽然没有加锁,但是并发写入文件是没有失误的,就是所有的内容都会正常的依次写入,为什么没有造成因为没有加锁造成的数据不对的问题呢? 下面是我的代码 <pre> package main import ( "fmt" bs "github.com/tgyf007/mypackage/binarytostring" "os" "sync" "time" ) var lo sync.Mutex func main() { start := time.Now() ch := make(chan string) for j := 0; j < 1; j++ { for i := 97; i < 123; i++ { go writetofile(i, ch) } } for j := 0; j < 1; j++ { for i := 97; i < 123; i++ { fmt.Println(<-ch) } } fmt.Printf("%.6fs\n", time.Since(start).Seconds()) } func writetofile(i int, ch chan<- string) { // lo.Lock() // defer lo.Unlock() str := bs.BuildString(i, 3) bg := bs.BuildString(i-32, 3) // log.SetOutput(os.Stdout) // log.Println(str) start := time.Now() for i := 0; i < 5; i++ { dst, err := os.OpenFile("./text.txt", os.O_RDWR|os.O_CREATE|os.O_APPEND|os.O_SYNC, 0644) _, err = dst.Write([]byte(str + time.Now().String() + "\n")) dst1, err := os.OpenFile("./text.txt", os.O_RDWR|os.O_CREATE|os.O_APPEND|os.O_SYNC, 0644) _, err = dst1.Write([]byte(bg + time.Now().String() + "\n")) if err != nil { ch <- fmt.Sprint(err) return } } secs := time.Since(start).Seconds() ch <- fmt.Sprintf("%.6f", secs) // ch <- fmt.Sprintf("%.6f, %s", secs, str) } </code>

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1725 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传