У меня есть программа, написанная на C для подсчета частот слов в файле, используя несколько потоков. Я ожидаю, что программа будет работать быстрее при добавлении потоков, но при добавлении потоков производительность снижается. Я отладил проблему вплоть до блокировки мьютекса в секции кода ha sh моего кода, единственной общей переменной, которую я использую. Как правильно использовать замки для обеспечения лучшей производительности?
//Tokenize file contents
char **tokens=tokenizeFileContents(fileContent);
//Loop to iterate over all tokens and store frequencies
while(1){
if(tokens[index]==NULL){
break;
}
char * token=tokens[index];
pthread_mutex_lock(&hashTable_mutex);
if(ht_get(ht,token)==NULL){
ht_set(ht,token,"1");
pthread_mutex_unlock(&hashTable_mutex);
}
else{
pthread_mutex_unlock(&hashTable_mutex);
pthread_mutex_lock(&hashTable_write_mutex);
int count=atoi(ht_get(ht,token))+1;
char buf[32];
snprintf(buf, sizeof(buf), "%d", count);
ht_set(ht,token,buf);
pthread_mutex_unlock(&hashTable_write_mutex);
}
index++;
}