我想模拟一个剧院预订系统,在这个系统中,客户与操作员通信,用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?
发布于 2019-03-29 17:33:58
假设您正在为Posix兼容的系统(如Linux)编写代码,您可以在等待循环之前和之后使用clock_gettime()
,并从结束时间中减去开始时间,以获得经过的时间。您将希望使用挂钟,而不是CPU时间的时钟。由于此函数将其结果放入struct timespec
中,这是一个由两部分组成的值,因此减法并不简单(但也不是特别复杂):您需要考虑减去纳秒字段导致负数的情况。
CLOCK_REALTIME
和CLOCK_MONOTONIC
之间的区别在于,单调时钟不受与时间服务同步所需的主机时钟调整的影响。(另一个区别是,没有关于CLOCK_MONOTONIC
返回的值在日历中代表什么的信息,因为它通常在系统引导时开始计数。但是,两次之间的差异是完全有意义的。)
https://stackoverflow.com/questions/55421016
复制