并发使用时,BufferedWriter不起作用

时间:2019-03-16 16:00:24

标签: go concurrency writer buffered

我需要同时从多个goroutine(例如30个)向文本文件中写入大量数据。我的工作是这样:

f

但这在某些情况下似乎不起作用。这里的*os.File'captcha' => function($attribute, $val, $fail)use($request) { if(!empty(session('captcha_validated_reset_account'))&&session('captcha_validated_reset_account')==$request->input('account')){ return; }else{ Rule::required... //and call a rule named 'captcha' to validate the captcha code from user input //return 'required|captcha'; } } 对象。在某些情况下,这根本不会写入文件,在某些情况下,它会写入一些数据,但以后不会写入。行为非常不一致,也没有错误。

有什么想法可能会发生这种情况吗?

1 个答案:

答案 0 :(得分:3)

问题是您有多个goroutine试图一次写入一个文件,而没有任何同步。这将导致不可预知的输出顺序,并可能丢失写入。在此之上使用缓冲的I / O只会有助于掩盖行为。

最好的解决方案是启动一个写入您的输出的goroutine(根据需要,使用或不使用缓冲的I / O),并让所有工作人员将要写入的数据发送给goroutine。频道。