gpt4 book ai didi

c++ - 如何为多种线程加锁 pthread_mutex_lock

转载 作者:行者123 更新时间:2023-11-30 17:40:10 27 4
gpt4 key购买 nike

如何创建一个锁来锁定不同线程进入该函数?线程 1:A线程 2:C主题 3:C线程 4:B线程 5:C主题 6:B

“A”、“B”、“C”是创建线程时传递给线程的参数。

所以当我锁定这一个锁X时,所有传入“A”和“B”的线程都无法继续,只有“C”类型的线程可以进入临界区。或者我必须为此示例制作 6 个不同的锁吗?

谢谢!

最佳答案

您的要求很模糊,但假设您希望并发读者具有相同的“允许的字母”,那么您最好使用 rwlock。 (如果您实际上只是希望“控制”线程设置允许 A、B 或 C 中的哪一个工作,而不是在受控代码中没有其他“字母”运行时让 A、B 和 C 接管,那么需要一个不同的(更简单的)解决方案......)

作为第一步(这样我们就可以以更容易理解的方式“演化”解决方案),每个线程:

1) 获取读卡器锁

2)如果“允许的字母”变量与他们的字母不同,他们会释放读取器锁并尝试写入器锁

    2a) 当获得写入锁时,他们将允许的字母修改为自己的字母,然后释放该锁并在 1) 处重新启动(见下文)

3)做好自己的工作

4)释放读卡器锁

这使用“writer”模式来影响允许字母的更改。如果您实际上需要仲裁一些对共享数据具有写访问权限的“允许字母”线程,您将需要更改 3) 以在要释放的不同 rwlock 上获取读取器或写入器锁之前4)。

2a) 创建竞争条件,也就是说,A 线程获取写入者锁,然后设置允许的字母,当它释放锁时,B 线程可能会先获取写入者锁,然后才能获取读取者锁来执行某些实际工作。然后,B 线程可能会释放写入者锁并寻求读取者锁,却发现 A 现在拥有该锁,因此线程都不会继续进行,但它们本身也不会死锁。这个问题是否能自行解决主要取决于 rwlock 的线程排队实现,还取决于竞争条件、中断、系统负载导致的抢占等。可以通过多种方式解决这个问题,但它很容易并且可能足以使用一个额外的互斥锁,以禁止具有写锁的其他线程修改允许的字母:它们可以对此使用 trylock,如果失败,则释放它们的写锁并在 1) 处重新启动。

因此,我们最终得到一两个 rwlock 和一个支持互斥锁......

关于c++ - 如何为多种线程加锁 pthread_mutex_lock,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21593275/

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