[英]Is there a limit on the number of threads that can simultaneously acquire reader lock (SRW)?
在我的应用程序中,为了并发,我在 Windows 上使用 Slim Reader Writer 锁,在 Mac/Linux 上使用 pthread_rwlock_t。
我看到一个奇怪的测试失败,这让我想知道在给定时间可以拥有读取器的线程数量是否有限制?
请为 SRW 锁和 pthread_rwlock_t 回答这个问题。 谢谢 !
更新:
该测试创建了 16 个初始化为调用相同 proc 的线程,比如说 foo()。 这会间歇性地挂起。
void foo(int id) //id is the thread ID
{
/* Acquire shared mutex ... */
AcquireReadLock(g_mutex); // calls AcquireSRWLockShared on windows
AtomicDecrement(&g_TotalNumberOfThreads); // calls InterLockedDecrement()
while (g_TotalNumberOfThreads != 0)
; //spin
ReleaseReadLock(g_mutex);
}
问题原来是变量 g_TotalNumberOfThreads(在上面的问题代码中)被编译器优化为不是一直被读取。
将变量 g_TotalNumberOfThreads 标记为 volatile 解决了这个问题。 谢谢 !
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.