Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > pthread_mutex_timedlock - ожидание в миллисекундах


Автор: vdm 28.10.2012, 17:07
Привет.

Возможно используя ф-цию http://linux.die.net/man/3/pthread_mutex_timedlock задать время ожидания в миллисекундах? Если да, тогда как обойти возможное переполнение?

Автор: boostcoder 29.10.2012, 13:38
вопрос какой-то глупый. функция и так принимает время в микросекундах.
в чем вопрос?

Автор: vdm 30.10.2012, 01:17
Цитата(boostcoder @ 29.10.2012,  13:38)
вопрос какой-то глупый. функция и так принимает время в микросекундах.
в чем вопрос?

Ситуация следующая:

Имеется функция для перекрытия мутекса с ожиданием в миллисекундах. Также в ней присечена возможность переполнения значения timeout.tv_nsec - что за переполнение говорится здесь: http://linux.die.net/man/3/pthread_mutex_timedlock. Всё бы и ничего, но посмотрев на количество математических вычислений в этой функции, ненароком задумываешся => одни только вычисления чего стоят процессору... а время ожидания иногда требуется указать всего-то 10 миллисекунд...

Вообщем есть идеи как упразднить вычисления и при этом получить тот же результат: время для задержки в миллисекундах с предотвращением переполнения параметра timeout.tv_nsec?

Код
fn (long ms)
{
    int res;
    struct timeval now;
    struct timespec timeout;

    gettimeofday(&now, NULL);
    uint usec = (ms % 1000)*1000 + now.tv_usec;
    timeout.tv_sec = now.tv_sec + ms/1000 + usec/1000000;
    timeout.tv_nsec = (usec % 1000000)*1000;

    res = pthread_mutex_timedlock(&mutex, &timeout);

    if ((ETIMEDOUT != res) && (0 != res))
    {
        // lf error...
    }

    return res;
}

Автор: boostcoder 30.10.2012, 08:46
Цитата(vdm @  30.10.2012,  01:17 Найти цитируемый пост)
одни только вычисления чего стоят процессору

страшно жить smile 
уверяю Вас, все вычисления в этой функции до вызова pthread_mutex_timedlock(), займут не более 1 мкс. Си, это не php и не ruby ;)

Добавлено @ 08:48
Цитата(boostcoder @  30.10.2012,  08:46 Найти цитируемый пост)
займут не более 1 мкс.

и это с учетом сискола gettimeofday(). без него, и 30 нс. более чем достаточно.

Автор: vdm 30.10.2012, 11:22
Подумал, может у кого-нибудь возникнет более оптимизированый вариант...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)