【求助】perl如何多线程读写同一个文件
我想生成一个文件,文件内容是从1 ~ 50000000,并保存到num.log的文件,请问一下如何用perl的多线程实现?
如果我直接thread几个线程的话,每个线程都调用create_num的函数,生成的好像都是重复的数据了。
[解决办法]
建议最好用单线程。
用多线程读写同一个文件,标志文件写入位置的文件指针的维护处理非常麻烦!
[解决办法]
多线程反而增加了复杂性,还容易出错,要处理好同步的关系
如果一定要多线程,可以把1 ~ 50000000分成几大段,每一线程处理一段,生成单独的小文件,最后合并小文件
[解决办法]
看是二进制数据还是文本数据了。
二进制数据,每个元素定长,那么分成几份,每个线程偏移到指定位置循环fread读自己那份就行了。
文本数据不定长,换行符需要自己找,但实现是类似的。 先获取文件总大小,然后切成N份,每份长假设M,那么先偏移到M,向后找\n作为分界,交给第一个线程。 然后从\n开始偏移M,向后找第一个\n作为分界,交给第二个线程,类似一直到文件末尾。