multithreading - bash 从多个线程追加文件

标签 multithreading bash thread-safety gnu-parallel

我正在处理大数据,我正在尝试并行化我的流程功能。 我可以使用多个线程并处理每个用户是一个不同的线程(我有 20 万个用户)。

每个线程都应该在输出文件中追加文件的前 n 行,并在所有线程之间共享。

我写了一个执行head -n 256 thread_processed.txt >>输出的Java程序(每个线程都会这样做)

我需要以原子方式写入输出文件。

如果线程 A 写入了从 0 到 9 的行,而线程 B 写入了从 10 到 19 的行,则输出应该是:[0...9 10...19]。线条不能重叠,不能像[0 1 2 17 18 3 4 ...]

如何在 bash 脚本中管理对输出文件的并发写入访问?

最佳答案

来自 GNU Parallel 的

sem 应该能够做到:

sem --id mylock "head -n 256 thread_processed.txt >> output"

它将启动一个名为 mylock 的互斥锁。

如果您担心有人可能会在 head 运行时读取 output:

sem --id mylock "cp output o2; head -n 256 thread_processed.txt >> o2; mv o2 output"

关于multithreading - bash 从多个线程追加文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42075841/

相关文章:

linux - Sed - 修改第一列中的单个字符而不触及其他字符

c++ - 停止 QThread worker 处理即将被删除的资源的正确方法是什么?

java - ThreadPoolExecutor.execute() 的内存可见性保证

c++ - 具有独立主机环境的线程 (c++)

multithreading - 对并行Haskell感到困惑

ios - 完成 block 完成后如何调用方法?

java - 为什么多线程似乎无法加快我的 Web 应用程序的速度?

mysql - 使用 bash 脚本在 mysql 中插入值

linux - 如何在 ImageMagick 中使用带有标题的标准输入

java - 哪些变量是线程安全的?