bash从多个线程追加文件

Pro*_*eny 5 bash multithreading thread-safety gnu-parallel

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

每个线程应n在输出文件中附加文件的第一行,该文件在所有线程之间共享一个输出文件。

我编写了一个Java程序来执行head -n 256 thread_processed.txt >> output(每个线程都会执行此操作)

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

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

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

Ole*_*nge 5

sem 来自GNU Parallel的应该能够做到:

sem --id mylock "head -n 256 thread_processed.txt >> output"
Run Code Online (Sandbox Code Playgroud)

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

如果您担心有人outputhead运行时可能会阅读:

sem --id mylock "cp output o2; head -n 256 thread_processed.txt >> o2; mv o2 output"
Run Code Online (Sandbox Code Playgroud)