Я пытаюсь использовать tbb concurrent_hash_map для увеличения производительности моего приложения. Прочитайте об этом и примените в соответствии с моим приложением, но я вижу сбои ..
Итак, мое приложение представляет собой многопоточное приложение, в котором я храню пары, ключ - char *, а значение - целое число. Псевдокод выглядит так:
В .h файле,
typedef tbb::concurrent_hash_map<const void*, unsigned, Hasher> tbb_concurrent_hash;
tbb_concurrent_hash concurrent_hash_table;
tbb_concurrent_hash::accessor write_lock;
tbb_concurrent_hash::const_accessor read_lock;
В файле .c,
void storeName(const char * name) {
int id=0;
// This creates a pair object of name and index
std::pair object(name, 0);
// read_lock is a const accessor for reading. This find function searches for char* in the table and if not found, create a write_lock.
bool found = concurrent_hash_table.find(read_lock, name);
if (found == FALSE) {
concurrent_hash_table.insert(write_lock, name);
// Get integer id somehow.
id = somefunction();
write_lock->second = id;
write_lock.release();
} else {
// if the name is found in the table then get the value and release it later
id = read_lock->second;
read_lock.release();
}
}
Насколько я понимаю, у меня все хорошо с реализацией, но, как я уже сказал, произойдет несколько сбоев, когда find возвращает мне FALSE. Аварии также имеют следы мьютексов.