如何锁定各种线程pthread_mutex_lock

how to lock for a variety of threads pthread_mutex_lock

本文关键字:pthread 线程 mutex lock 何锁定 锁定      更新时间:2023-10-16

您如何创建一个锁定的锁定,该锁可以锁定不同的线程输入功能?线程1:a线程2:C线程3:C线程4:B线程5:C线程6:b

" a"," b"," C"是创建线程的参数。

因此,当我锁定一个锁定X时,所有的线程都会传递给" A"answers" B",并且只有" C"类型的线可以进入关键部分。还是我必须制作6个不同的锁?

谢谢!

您的要求含糊不清,但是假设您想要同时使用相同的"允许字母"的读者,则最好使用rwlock。(如果您实际上只想设置一个"控制"线程,则允许A,B或C的哪个线程,而不是让A,B和C接管任何其他"字母"需要一个不同的(简单)解决方案....)

作为第一个切口(因此我们可以以更容易理解的方式"发展"解决方案),每个线程:

1)获取读取器锁

2)如果"允许的字母"变量与其字母不同,则会释放读取器锁并尝试为作者锁

     2a)在获取作家锁时,它们将允许的字母修改为自己,然后将锁定并在1处重新启动)(请参见下文)

3)做他们的工作

4)释放阅读器锁

这使用"作家"模式来影响允许字母的更改。如果您实际上需要仲裁一些对共享数据的写入访问权限的"允许字母"线程,则需要更改3)将读者或作家锁定在A dintiment rwlock上,以释放4)。

2a)创建了种族条件,例如,A线程获取作者锁,然后设置允许的字母,当它发布锁时,B线程可能会在作者锁定之前获得读取器锁来完成一些实际工作。然后,B线程可以释放作者锁,然后去找一个读者锁以找到现在的锁,所以线程都没有进展,但是它们本身也不会陷入僵局。这是否决定自身主要取决于RWLOCK的线程排队实现,还取决于种族条件,中断,由于系统负载而引起的先发制人等。一个额外的静音,可以禁止使用写锁修改允许字母的其他线程:他们可以在此上使用trylock,如果失败,请释放其写入锁并在1处重新启动)。

所以,我们最终得到了一个或两个rwlocks和一个支撑式的静音....