【发布时间】:2014-07-02 14:36:33
【问题描述】:
什么是最好的等价物?对于这么简单的功能,我没有找到任何合理的解决方案。我知道的选择:
1) MPEnterCriticalRegion - 不幸的是,这非常无效,可能是因为尽管它的名字它进入内核模式,所以对于重复锁定它只需要太多时间......
2) OSSpinLockLock - 不可用,因为显然不是递归的。如果它是递归的,它将是正确的等价物。
3) pthread_mutex_lock - 没有尝试过,但我并不期待太多,因为它可能只是使用关键区域或其他系统资源来模拟。
【问题讨论】:
-
您可以轻松地围绕非递归锁生成递归包装器,所以如果您的摘要正确,我猜#2。
-
怎么样?我正在考虑它,但最后我必须开始比较线程 ID 等......似乎比我最初想象的要复杂。
-
是的,如果线程获得锁,您必须比较线程 ID 并存储所有者 TID,就是这样。 10 行额外代码顶部。
-
好吧,我不确定它是否那么简单:1)如果线程 ID 匹配 -> 好的,没有什么问题。 2)如果线程ID不匹配->问题,因为多个线程可能做同一件事,地狱存储的线程ID甚至可能处于部分未确认状态,因此在极端情况下即使不匹配也可能匹配实际上匹配。 -> 所以我需要多一把锁来保护测试代码。现在的问题是,如果不会有额外的问题......
标签: multithreading macos performance critical-section