这是我代码中的一个函数,可以输出结果,在将大数字输出到文件时,实时占用过多的CPU使用率(在示例中所示的特定代码中为'xa'),请考虑不要有望实现数据竞赛。
此函数保证不会发生数据争用,并且与使用相似代码将内容输出到具有多线程文件的其他函数一起使用。整个程序在执行后会生成数字,并且数字将继续变得越来越大。我已经根据谣言实现了流缓冲区,这将改善我遇到的问题,{bufsize}是在全局中定义的,而{char * buf}是在此特定代码中定义的:
const size_t bufsize = 256 * 8192; char buf [bufsize];
通过将事物放到全局中也是试图确保不会发生堆栈溢出。
void output_file_write_xa (int counter, int robot, BigInteger xa,int Index_of_threads, int sequence_number, std::string filename, char* buf)
{
filename = "fbs/";
sequence_number = counter - robot;
filename += std::to_string(sequence_number);
std::ofstream outputA63;
outputA63.open(filename);
outputA63.rdbuf()->pubsetbuf(buf, bufsize);
outputA63 << xa << std::flush;
outputA63.close();
thread_id[Index_of_threads] = 1;
}
因此,您会认为将一些数据写入文件不会占用太多的CPU使用率。好的,该功能占用了处理器核心的所有cpu时间,而这只是性能的可怕。