gpt4 book ai didi

c++ - 具有相对超时的函数 pthread_rwlock_timedwrlock/timedrdlock

转载 作者:太空宇宙 更新时间:2023-11-04 03:44:09 26 4
gpt4 key购买 nike

我正在为 Solaris(Sparc)、AIX(PowerPC) 和 Red Hat Linux(x86_64) 使用 C/C++ 开发跨平台应用程序,我们在其中使用 pthread 库。

我需要为读者/作者使用同步超时,所以我使用函数 pthread_rwlock_timedwrlock/timedrdlock,为此你必须使用绝对时间。

这是我当前的实现并且工作正常:

bool nLec1Esc::close (unsigned int timeout){
struct timeval now;
struct timespec strtimeout = {0};

// Get the current time
gettimeofday(&now,NULL);

// Add time for timeout value
strtimeout.tv_sec = now.tv_sec;
strtimeout.tv_nsec = (now.tv_usec+1000UL*timeout)*1000UL;

return (pthread_rwlock_timedwrlock(rwlock, &strtimeout) == 0);
}

我正在尝试改进实现以提高性能并防止每次调用 gettimeofday 并使用固定的相对时间。

我看到它可用于 Solaris 函数 pthread_rwlock_reltimedwrlock_np,使用相对超时值。

您认为有什么方法可以改进此实现吗?

提前致谢。

最佳答案

在 POSIX 标准或 GNU/Linux 实现中都没有 reltimedwrlock 这样的东西。这是该标准的一个已知缺点。缺点的根源在于系统时间和应该用于 I/O 超时的“单调”时间之间的差异。

POSIX 不强制操作系统具有单调计时器,因此 pthread 库不提供可靠的方法来设置 wrlock 等待操作的超时。您的方法也不可靠,因为如果系统时间更改,您的实现将挂起(有关详细信息,请参阅 this 讨论)。

我认为设置 wrlock 操作超时的最便携方法是创建一个显式计时器(以您喜欢的方式)以从另一个线程或信号处理程序调用 pthread_rwlock_destroy。

关于c++ - 具有相对超时的函数 pthread_rwlock_timedwrlock/timedrdlock,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26214244/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com