【发布时间】:2015-10-19 23:11:15
【问题描述】:
我不是直接询问互斥体,尽管有些相关。
有2组函数A和B。当A中的函数运行时,B中的任何函数都不应该运行,反之亦然。
有多个线程可以调用A或B中的函数,以上都应该满足。
我可以通过混合一些锁定方式来想出很多方法来做到这一点,但我不知道什么是最好的方法,或者至少是一些缩小范围的好方法。
【问题讨论】:
-
您使用哪种语言 - C 或 C++?您使用的是该语言的哪个版本?您在哪个平台或平台上工作?您是在寻找使用语言标准提供的设施的代码,还是在寻找主机 O/S 提供的设施?而且,一般来说,为什么您认为互斥锁不合适?一个互斥锁可用于保护 set A 和 set B 功能;您必须在调用任一集中的任何例程之前获取该互斥锁。当然,这会降低并发性,但这似乎是可以接受的。
-
@JonathanLeffler 我可以完全访问 posix 线程。我正在尝试找到一种方法来最小化锁定。
-
要明确一点——A 组中可以有 200 个线程调用一个函数,只要 B 组中的函数中没有线程,是吗?
-
如果您有 200 个线程当前正在使用 A 组中的函数,那么需要访问 B 组中的函数的线程如何停止调用 A 组中的函数的新线程,这样它就不会缺乏访问权限。相反,当然。你想强加什么规则?我可以看到一个简单的互斥锁是不合适的,但我不确定是什么。
-
^^ 我认为这将是锁内状态机的那些混乱的事情之一。释放锁后,不允许运行的线程在事件/信号量上保持。
标签: c++ c multithreading synchronization