mjs*_*rtz 2 c algorithm do-while
所以我正在开发一种算法来在线程之间均匀分配工作,但它有点独特.正在进行的工作是文件比较,其中我们有一个文件列表(比方说10个文件).我们不希望将文件1与文件1进行比较,因此每个文件都会跳过比较自身.文件1将自己与文件2到10进行比较,文件2将自己与文件3到10等进行比较.因此,当我们向下移动文件比较列表时,文件数比较下降.这是我遇到问题的小片段(特别是do-while循环)
// Get first pass file chunks
printf("Split approximation: ");
for (int i = 0; i < num_threads; i++)
{
file_chunks[i] = (int)floor((double)num_file_compares / (double)num_threads);
printf("%d ", file_chunks[i]);
}
printf("\n");
// Adjust file chunks to contain all files
for (int i = 0; i < num_threads; i++)
{
file_chunk_sum = file_chunk_sum + file_chunks[i];
}
append_count = num_file_compares - file_chunk_sum;
printf("Need to append last %d\n", append_count);
append_index = num_threads;
do
{
printf("im in the do while...\n");
printf("append count is: %d\n", append_count);
printf("why am i here?\n");
append_index = append_index - 1;
file_chunks[append_index] = file_chunks[append_index] + 1;
append_count = append_count - 1;
} while (append_count > 0);
printf("Final split: ");
for (int i = 0; i < num_threads; i++)
{
printf("%d ", file_chunks[i]);
}
printf("\n");
Run Code Online (Sandbox Code Playgroud)
输入20个文件(190个文件比较)和5个线程,分割近似将是每个线程38个文件比较的偶数分割.追加计数为0,但仍会跳转到do-while循环.知道为什么吗?
这些的输出printf是
Number of files: 20
Number of threads: 5
Number of file compares: 190
Split approximation: 38 38 38 38 38
Need to append last 0
im in the do while...
append count is: 0
why am i here?
Final split: 38 38 38 38 39
Run Code Online (Sandbox Code Playgroud)