pthread_cond_timedwait() : time internal resolution issue.

Thomas Kim thomas73.kim at gmail.com
Tue Aug 15 09:39:10 UTC 2017


Dear Joel,

I forgot this basic configuration.

Thank you very much.

Best Regards,
Thomas Kim

2017. 8. 14. 21:11에 "Joel Sherrill" <joel at rtems.org>님이 작성:

> You have to configure the clock tick length. By default it is 10
> milliseconds if I remember correctly. All timeouts are done in the clock
> tick.
>
> By using main() as the entry point and not specifying any configuration
> info you are getting the entire default settings.
>
> On Aug 14, 2017 12:19 AM, "Thomas Kim" <thomas73.kim at gmail.com> wrote:
>
>> Dear Sir,
>>
>> I am testing pthread_cond_timedwait() on realview-pbx-a9 using QEMU.
>>
>> My testing code is below;
>>
>> #include <pthread.h>
>> #include <time.h>
>> static void thread_sleep(struct timespec *ti)
>> {
>>     pthread_mutex_t mtx;
>>     pthread_cond_t cnd;
>>     pthread_mutex_init(&mtx, 0);
>>     pthread_cond_init(&cnd, 0);
>>     pthread_mutex_lock(&mtx);
>>     pthread_cond_timedwait(&cnd, &mtx, ti);
>>     pthread_mutex_unlock(&mtx);
>>     pthread_cond_destroy(&cnd);
>>     pthread_mutex_destroy(&mtx);
>> }
>> void own_msleep(unsigned long msecs)
>> {
>>     struct timeval tv;
>>     gettimeofday(&tv, 0);
>>     struct timespec ti;
>>     ti.tv_nsec = (tv.tv_usec + (msecs % 1000) * 1000) * 1000;
>>     ti.tv_sec = tv.tv_sec + (msecs / 1000) + (ti.tv_nsec / 1000000000);
>>     ti.tv_nsec %= 1000000000;
>>     thread_sleep(&ti);
>> }
>> #define TEST_1 0
>> #define TEST_2 0
>> #define TEST_3 0
>> #define TEST_4 1
>> int main(int argc, char *argv[])
>> {
>>  int count = 0;
>>
>>  while (1)
>>  {
>> #if TEST_1 // Normal operation. total time for count 100 = almost 1
>> second.
>>   own_msleep(10);
>>   count++;
>>   if (count%100 == 0) printf("count=%d\n", count);
>> #endif
>> #if TEST_2 // Abnormal operation. total time for count 200 = about 2
>> seconds.
>>   own_msleep(5);
>>   count++;
>>   if (count%200 == 0) printf("count=%d\n", count);
>> #endif
>> #if TEST_3 // Abnormal operation. total time for count 500 = about 5
>> seconds.
>>   own_msleep(2);
>>   count++;
>>   if (count%500 == 0) printf("count=%d\n", count);
>> #endif
>> #if TEST_4 // Abnormal operation. total time for count 1000 = about 10
>> seconds.
>>   own_msleep(1);
>>   count++;
>>   if (count%1000 == 0) printf("count=%d\n", count);
>> #endif
>>  }
>>  return 0;
>> }
>>
>> As you see in my testing code, I called own_msleep() function using
>> pthread mutex, condition variable API.
>>
>> As my result, when I use own_msleep(10), there is not any problem for
>> this.
>> But, when I decrease time internal from 10ms to (5 or 2 or 1)ms, msleep()
>> have addtional delay.
>>
>> As I know from BSP code for realview-pbx-a9, OS timer interval is 1ms.
>>
>> Is it correct behaivor ?
>> Is there any limitation for using short time interval ?
>>
>> Please advise me.
>>
>> Best Regards,
>> Thomas Kim.
>>
>>
>> _______________________________________________
>> users mailing list
>> users at rtems.org
>> http://lists.rtems.org/mailman/listinfo/users
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/users/attachments/20170815/a6192b85/attachment-0002.html>


More information about the users mailing list