-4
我必須使用Posix在C中創建一個wordcount程序。我還必須使用pthreads通過將輸入文件讀入緩衝區,然後在給定要使用多少線程的情況下對緩衝區進行分區來使用多線程。然後,每個線程應計算其分區中的字數。問題是我無法找到任何來源來分割或分割緩衝區中的內容。任何幫助都將不勝感激。如何分區緩衝區中的內容C
我必須使用Posix在C中創建一個wordcount程序。我還必須使用pthreads通過將輸入文件讀入緩衝區,然後在給定要使用多少線程的情況下對緩衝區進行分區來使用多線程。然後,每個線程應計算其分區中的字數。問題是我無法找到任何來源來分割或分割緩衝區中的內容。任何幫助都將不勝感激。如何分區緩衝區中的內容C
假設程序將文件存儲爲指向字符數組的指針,您可以通過將緩衝區的「分區」表示爲指向分區開始的指針和表示大小的整數的分區。
下面的代碼片段可以幫助您分區緩衝區。
struct buffer_partition {
char* start;
int size;
}
void* word_count(void* arg) {
struct buffer_partition* buffer=(struct buffer_partition*)arg;
/* do word counting with buffer->start
be careful to not access characters after buffer->size */
}
int main() {
/* read input */
struct buffer_partition* partition = (struct buffer_partition*)malloc(sizeof(struct buffer_partition));
partition->start=buffer+offset;
partition->size=size_of_each_partition;
pthread_create(thread_pointer, extra_attributes, word_count, partition);
/* sum all results, print answer :) */
}
謝謝,這真的給了我一個很好的起點。 – jsanch16 2014-10-03 21:24:44
只需手動完成。一般來說,如果你的緩衝區有80個字符,並且你有四個線程,線程1看字符0-19,線程2看字符20-39,依此類推。就你而言,由於你在分裂詞語,所以你必須環視這些界限,以確保你不會在詞語中斷。 – 2014-10-03 02:17:46
如果你有POSIX,你可以使用'mmap()'將文件映射到內存中,然後給每個線程分配一部分映射內存來處理。例如,四個線程,給每個內存的1/4工作。你需要考慮開始和結束點;如果一個詞跨越兩個線程之間的界限會發生什麼? – 2014-10-03 02:18:06