【问题标题】:Is there a limit on the number of threads that can simultaneously acquire reader lock (SRW)?可以同时获取读卡器锁 (SRW) 的线程数是否有限制?
【发布时间】: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,我用您评论的答案更新了问题。
  • 向我们展示AtomicDecrementAcquireReadLockReleaseReadLock的实现
  • 我不明白为什么有人会否决这个问题。能否请您提供反馈。谢谢!

标签: c++ multithreading concurrency mutex thread-synchronization


【解决方案1】:

问题原来是变量 g_TotalNumberOfThreads(在问题的上述代码中)正在被编译器优化为不一直被读取。

将变量 g_TotalNumberOfThreads 标记为 volatile 解决了这个问题。谢谢 !

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-08
    • 2015-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-04
    相关资源
    最近更新 更多