bash从多个线程追加文件

时间:2017-02-06 19:32:53

标签: multithreading bash thread-safety gnu-parallel

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

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

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

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

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

那样

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

1 个答案:

答案 0 :(得分:4)

来自GNU Parallel的

sem应该能够做到:

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

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

如果您担心有人可能在output正在运行时阅读head

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