我正在维护一些在Windows和几个UNIX平台上运行的软件: Mac、Linux、AIX和Solaris。它在pthread或Win32线程之上实现了一个线程基础设施。我开始在这个基础设施中实现rwlock,以便我们的开发人员可以使用它们。到现在为止还好。
在Mac上,我们最初使用普通的pthread实现线程,但发现性能非常差,因为OS X的pthread互斥总是进行系统调用。Apple建议我们使用GCD分派信号量,这很好用,性能有了相当大的提高,因为如果信号量是空闲的,等待信号量是一个简单的用户空间操作。
但是,我看不到任何与rwlock等效的方法,而且就简单的信号量而言,这似乎是不可能的。我是否遗漏了什么,或者这实际上是不可能的?
注意:使用队列和块将所有内容都切换到GCD方法是不可行的。代码必须在没有GCD的平台上工作,并且在大约170个源文件中重写所有线程基础设施的用法是不切实际的。
发布于 2016-07-19 17:48:51
我太傻了,应该先看看维基百科。有several ways可以做到这一点。这是一个标准的计算机科学问题:不是完全微不足道的,但很容易理解。
https://stackoverflow.com/questions/38435512
复制相似问题