c - 如何测量线程通过条件变量所花费的时间?

标签 c multithreading time pthreads condition-variable

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

    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?

最佳答案

假设您正在为 Posix 兼容系统(如 Linux)编写代码,您可以使用 clock_gettime()等待循环前后,用结束时间减去开始时间,得到耗时。您需要使用挂钟,而不是 CPU 时间时钟。由于此函数将其结果放在 struct timespec 中,这是一个由两部分组成的值,因此减法并不简单(但也不是特别复杂):您需要考虑减去纳秒的情况字段结果为负数。

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

关于c - 如何测量线程通过条件变量所花费的时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55421016/

相关文章:

java - JUnit 终止子线程

c - 使用 MPI-IO 读取多个文件

c - 超过 500000 用 Eratosthenes 的方法

C# AppDomains 和线程

java - 启动一个线程后,我们如何保持 run 函数运行?我有很多想法,但我不确定哪个更专业?

javascript - MomentJs 仅返回 Meteor 中上周内的日期

mysql - 独立打印字符串中的 C 格式说明符

python - 列出时间格式的元素并计算与今天的时间差异

c - mdb工具sql查询表 namespace 分隔

计算两个数的回文数