2
세마포어의 리소스 수를 지정하지 않고 ReadWriteMutex를 만드는 방법은 무엇입니까?
ReadWriteMutex의 일반적인 패턴은 세마포어를 사용하고 모든 리소스를 얻기 위해 writer 루프를 사용하는 것입니다.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의 카운트가 옳다고 생각하지 않습니다. "무한"독자를 허용하는 더 좋은 패턴이 있습니까? (리소스 개수 필요 없음)?
성능 결과에 놀랐습니다. 세마포어 기반 솔루션이 읽기 및 쓰기 작업을보다 균등하게 인터리빙하고 더 빠르게 실행됩니다 (3.7s 대 4.2s). – gaspard
이것은 항상 사실이 아닙니다. 요일과 기상 조건에 따라 다릅니다 (보이는 것처럼 보입니다). – gaspard