Потоки операционной системы и проблема блокировки - PullRequest
0 голосов
/ 28 февраля 2020

Я не знаю, почему есть некоторые потерянные. Как я могу обновить код, чтобы несколько операций извлечения и вставки могли выполняться параллельно? Спасибо. Когда я запускаю свой файл. c, он показывает:

$ ./parallel_hashtable 8
[main] Inserted 100000 keys in 0.002476 seconds
[thread 7] 4304 keys lost!
.....
[main] Retrieved 65634/100000 keys in 0.792488 seconds

Мой код:

bucket_entry * retrieve(int key) {

    bucket_entry *b;
    for (b = table[key % NUM_BUCKETS]; b != NULL; b = b->next) {
        if (b->key == key) return b;
    }
    return NULL;
}

void insert(int key, int val) {

    int i = key % NUM_BUCKETS;
    bucket_entry *e = (bucket_entry *) malloc(sizeof(bucket_entry));
    if (!e) panic("No memory to allocate bucket!");
    e->next = table[i];
    e->key = key;
    e->val = val;
    table[i] = e;
}
...