函数pthread_rwlock_timedwrlock/timedrdlock具有相对超时
Function pthread_rwlock_timedwrlock/timedrdlock with relative time-out
我正在为Solaris(Sparc)、AIX(PowerPC)和Red Hat Linux(x86_64)开发一个跨平台的应用程序,我们在其中使用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等待操作的超时。您的方法也不可靠,因为如果系统时间发生更改,您的实现将挂起(有关详细信息,请参阅本讨论)。
我认为在wrlock操作上设置超时最方便的方法是创建一个显式计时器(以您喜欢的方式),从另一个线程或信号处理程序调用pthread_rwlock_destroy。
相关文章:
- 如何计算具有指定类型的表达式的相对精度和绝对精度
- 如何使用cppcheck处理半相对包含路径
- 为什么字符串比较的 == 运算符相对于任一字符串长度线性时间(似乎)?
- 使用哈希图进行相对排序
- 有没有办法保证析构函数的相对顺序?
- Windows 和 Linux 之间的相对路径分辨率差异?
- 为什么从具有较大阵列的 SIMD 内部函数中获得的相对加速比标量更大?
- MOVNTI 存储是否相对于由同一线程创建的其他 MOVNTI 存储重新排序?
- 如何获取 CMake 单元测试的相对路径?
- std::atomic 和 std::mutex 的相对性能
- 我如何知道字符串中字符相对于英文字母的位置值?
- 非静态成员引用必须相对于特定对象
- 如何在相对于观看方向的地形中移动
- CRTP相对于抽象类的优势
- 如何设置与其背景图像大小相对应的窗口大小?
- 专门用于"direct"函数类型(与函数指针类型相对)
- 当两个相等的双精度的相对比较不起作用时,我该怎么办?
- 互斥锁能否保护相对于特定指针的数据?
- Bazel:http_archive()中url的相对本地路径
- 函数pthread_rwlock_timedwrlock/timedrdlock具有相对超时