gpt4 book ai didi

locking - 使 pthread_rwlock_wrlock 递归

转载 作者:行者123 更新时间:2023-12-03 01:11:05 24 4
gpt4 key购买 nike

我对 pthread 函数的行为有疑问 pthread_rwlock_wrlock 。上面链接的规范指出,当一个线程锁定了写入锁并且同一线程再次锁定它时,它会导致未定义的行为(我实际上可以观察到这一点,因为在 x86 Linux 上调用此函数是一个 noop,而在 PowerPC Linux 上它停止线程)。

我需要的行为是具有以下特征的读写锁:

  • 如果出现以下情况,线程的读锁定就会成功:
    • 该锁未被任何线程持有
    • 该锁仅被零个或多个线程(包括调用线程)读锁定,并且可能被调用线程读或写锁定
  • 写锁定在以下情况下成功:
    • 该锁未被任何其他线程持有
    • 只有当前线程持有锁(用于读取或写入)

使用pthread_mutex_t,可以通过初始化标志来控制锁的递归性,但这对于pthread_rwlock_t来说是不可能的。

我有什么选择?我实际上从未在 C 中实现过这种并发原语,而且我认为我在这里缺少一些明显的解决方案。

最佳答案

老实说,递归锁定确实有一些用途,但通常它是一种黑客手段。我现在似乎找不到这篇文章,但 Butenhof 对此有一个很好的咆哮。

回到问题。您可以保留一个特定于线程的标志来表示:“我有锁”。锁定后立即设置,解锁前取消设置。由于这是访问它的唯一线程,因此您应该是安全的。因此,当尝试锁定时,您只需检查:“嘿,这个东西已经锁定了吗?”。

作为旁注:如果一个线程尝试锁定两次,您确定设计没问题吗?

编辑

找到the article .

But if that's all that's necessary, why does POSIX have recursivemutexes?

Because of a dare.

关于locking - 使 pthread_rwlock_wrlock 递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7125250/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com