如何衡量一个线程通过条件变量所花费的时间?

问题描述 投票:1回答:1

我想模拟剧院预订系统,客户与运营商沟通以预留C座位。我正在使用pthread库。创建线程时,它会尝试获取保存可用运算符数量的变量的互斥量,并检查是否有任何运算符可用(使用条件变量),如果没有,则线程进入休眠状态。我想知道线程与操作符连接所花费的时间,即线程超过条件变量所花费的时间。我可以在线程的开头和条件变量之后立即使用计时器,否则这不起作用,因为当线程被阻塞时,计时器也会被阻止?如果是这种情况,这样做的正确方法是什么?谢谢。

    void* thread_transaction(void* arg) //the function passed to 
    pthread_create
    {
      //instantiating variables and such...

      //reserving an operator
      pthread_mutex_lock(&tel_mut);
      while(threadData->available_tel <= 0) 
        pthread_cond_wait(&tel_cond, &tel_mut);

      //can I put a timer at the start and right here and accurately 
      //measure the time?
c multithreading time pthreads condition-variable
1个回答
1
投票

假设您正在编写与Posix兼容的系统(如Linux),您可以在等待循环之前和之后使用clock_gettime(),并从结束时间中减去开始时间以获得经过的时间。你会想要使用挂钟时钟,而不是CPU时钟。由于此函数将其结果放在struct timespec中,这是一个由两部分组成的值,因此减法不是微不足道的(但它也不是特别复杂):您需要考虑减去纳秒字段会导致负数的情况。

CLOCK_REALTIMECLOCK_MONOTONIC之间的区别在于,单调时钟不受调整与时间服务同步所需的主机时钟的影响。 (另一个区别是没有关于CLOCK_MONOTONIC返回的值在日历方面表示的信息,因为它通常在系统启动时开始计数。但是,两次之间的差异是完全有意义的。)

© www.soinside.com 2019 - 2024. All rights reserved.