相关疑难解决方法(0)

可以安全地让多个进程同时写入同一个文件吗?[CentOs 6,ext4]

我正在构建一个系统,其中多个从属进程通过unix域套接字进行通信,并且它们同时写入同一文件.我从未研究过文件系统或这个特定的文件系统(ext4),但感觉这里可能存在一些危险.

每个进程写入输出文件的不相交子集(即,正在写入的块中没有重叠).例如,P1仅写入文件的前50%,P2仅写入第二个50%.或者P1P2写入偶数块时可能只写入奇数块.

拥有P1P2(在不同的线程上同时运行)写入同一文件而不使用任何锁定是否安全?换句话说,文件系统是否隐式强加了某种锁定?

注意:遗憾的是,我不能随意输出多个文件并在以后加入.

注意:自发布此问题以来,我的阅读与下面仅发布的答案不一致.我读过的所有内容都表明我想做的事情很好,而下面的受访者坚持认为我所做的是不安全的,但我无法辨别所描述的危险.

filesystems multiprocessing seek

47
推荐指数
2
解决办法
5万
查看次数

是os.File的Write()线程安全吗?

我想知道在os.File上调用Write()是否是线程安全的.我很难在文档中找到线程安全性的任何提及.

go

5
推荐指数
1
解决办法
1904
查看次数

并发写入标准输出线程安全吗?

下面的代码不会引发数据竞争

package main

import (
    "fmt"
    "os"
    "strings"
)

func main() {
    x := strings.Repeat(" ", 1024)
    go func() {
        for {
            fmt.Fprintf(os.Stdout, x+"aa\n")
        }
    }()

    go func() {
        for {
            fmt.Fprintf(os.Stdout, x+"bb\n")
        }
    }()

    go func() {
        for {
            fmt.Fprintf(os.Stdout, x+"cc\n")
        }
    }()

    go func() {
        for {
            fmt.Fprintf(os.Stdout, x+"dd\n")
        }
    }()

    <-make(chan bool)
}
Run Code Online (Sandbox Code Playgroud)

我尝试了多种长度的数据,变体https://play.golang.org/p/29Cnwqj5K30

这篇文章说它不是TS。

这封邮件并没有真正回答问题,或者我没有理解。

osfmt 的包文档对此没有太多提及。我承认我没有挖掘这两个包的源代码来找到进一步的解释,它们对我来说太复杂了。

有哪些建议和参考

go

4
推荐指数
1
解决办法
176
查看次数

标签 统计

go ×2

filesystems ×1

multiprocessing ×1

seek ×1