gpt4 book ai didi

c++ - 一组线程的C++互斥锁

转载 作者:行者123 更新时间:2023-12-01 14:52:46 25 4
gpt4 key购买 nike

我了解互斥量的基本原理是防止特定的代码路径被多个线程访问。

在当前设置中,我有10个类型A(A1-A10)的线程和10个类型B(B1-B10)的线程。我所说的类型是运行无限循环并分别调用方法A()和B()的线程。从这些方法A和B,它们都调用了函数X()。

我想做的是,锁定函数X()中的代码的特定部分,以便在任何时候从一对A和B(A1:B1,A2:B2 ...)中只有1个正在访问该代码小路。意味着A1在该代码路径中或在B1中,类似地,A2在B2的该代码路径中,依此类推。如果A1,A2,B3,B4,A5 ..正在同时访问该代码路径,则可以。只是从A-B对开始,只有1个线程访问此代码。

我该如何实现?

X() {

//
Lock this code so that either of (A1, B1) can access it
and so on..
//
}

最佳答案

您正在寻找的是10个互斥锁,一个用于A1/B1,一个用于A2/B2,等等。您可以将它们放在一个数组中,然后访问相应的数组。

另外,要清楚一点,互斥锁通常不保护代码路径。他们保护的是数据。因此,如果您有一个列表,则该列表可能具有互斥体,以便一次只能有一个线程在修改该列表(并且没有线程在另一个线程对其进行修改的同时访问该列表)。如果有多个列表,则为每个列表提供其自己的互斥体,因此多个线程可以同时使用同一代码路径,但是可以,因为每个线程都在使用不同的列表。从您的描述中听起来,您正在尝试执行类似的操作。

关于c++ - 一组线程的C++互斥锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61686223/

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