ReadWriteMutex 的常用模式是使用信号量并让编写器循环获取所有资源:
inline void write_lock() {
ScopedLock lock(acquire_mutex_);
for (size_t i=0; i < resource_count_; ++i) {
if (sem_wait(semaphore_) < 0) {
fprintf(stderr, "Could not acquire semaphore (%s)\n", strerror(errno));
}
}
}
这很好,除了您必须在信号量初始化期间指定资源计数并且随意选择 10 或 99999 的资源计数感觉不对。是否有更好的模式可以允许“无限”读者(不需要资源计数)?