我正在维护一些在Windows和几个UNIX平台上运行的软件:Mac,Linux,AIX和Solaris。它在pthreads或Win32线程之上实现了线程基础结构。我开始在这个基础架构中实现rwlocks,以便我们的开发人员可以使用它们。到现在为止还挺好。
在Mac OS X上,我们最初使用普通的pthread实现了线程,但发现性能非常差,因为OS X pthreads互斥锁总是进行系统调用。 Apple建议我们使用GCD调度信号量,这样做效果很好,性能也有相当大的提升,因为如果信号量是空闲的,等待信号量是一个简单的用户空间操作。
但是,我看不出任何方法可以做相当于rwlocks,并且就简单的信号量而言,它看起来是不可能的。我错过了什么,或者这实际上是不可能的?
注意:使用队列和块将所有内容切换到GCD方法是不可行的。代码必须在没有GCD的平台上工作,并且在大约170个源文件中重写线程基础结构的所有用法是不切实际的。