【发布时间】:2017-09-28 11:30:43
【问题描述】:
在我的应用程序中,为了并发,我在 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);
}
【问题讨论】:
-
什么是“奇怪的测试失败”?前提是什么,测试如何进行,结果如何?
-
另外,实际上,没有限制。
-
@David,我用您评论的答案更新了问题。
-
向我们展示
AtomicDecrement、AcquireReadLock和ReleaseReadLock的实现 -
我不明白为什么有人会否决这个问题。能否请您提供反馈。谢谢!
标签: c++ multithreading concurrency mutex thread-synchronization