- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在为 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/
我正在为 Solaris(Sparc)、AIX(PowerPC) 和 Red Hat Linux(x86_64) 使用 C/C++ 开发跨平台应用程序,我们在其中使用 pthread 库。 我需要为读
我是一名优秀的程序员,十分优秀!