LINUX.ORG.RU

Сообщения Timbuktu

 

udelay in concurrency context

Всем привет,

у меня вопрос: может ли несколько функций udelay выполняться паралельно? От чего зависить количество возможных таких «паралельных» задержек?

Я пишу block-driver-симулятор реального устройства. Он должен поддерживать паралельные операции (К примеру если устройство состоит из двух частей, то IO запросы к этим двум частям могут выполняться паралельно). Нужного паралеллизма я собераюсь достичь за счёт использования НЕСКОЛЬКИХ локов (один лок - для одной части устройства). Вот пример моего псевдокода:

void make_request(struct request_queue *q, struct bio *bio)
{
    getnstimeofday(start);
    spinlock_t lock = <<выбираю из списка локов, основываясь на bio>>;
    spin_lock(lock);
    //simulate IO ....   
    getnstimeofday(end);
    udelay(needed - (end - start));
    spin_unlock(lock);
}

Будет ли этот код работать паралельно (к примеру, для двух разных локов)?

Большое спасибо!

Timbuktu
()

RSS подписка на новые темы