我正在尝试使用write.table()将多个降雪线程写入同一文件。在少数情况下,行被破坏,即我看到它看起来像是混合了多行,我猜想当两个线程同时尝试写入同一个文件时。
一个例子是:
require(snowfall)
sfInit(parallel = TRUE, cpus = 16)
sfLapply(1:10000,function(x){
mytable = data.frame(a = c(1,2,3),b = c(4,5,6))
write.table(mytable,"mytable.csv",sep = ',',append = T,col.names = F)
})
有没有办法确保一次只有一个线程写入文件,本质上一个线程锁定文件,写入它然后释放锁?