【发布时间】:2026-01-04 19:20:02
【问题描述】:
我想了解如何实现某种形式的并发来限制读者的数量。
void *reader(void *rno)
{
// Reader acquire the lock before modifying numreader
pthread_mutex_lock(&mutex);
numreader++;
if(numreader == 1) {
sem_wait(&wrt);
}
pthread_mutex_unlock(&mutex);
// Reading Section
printf("Reader %d: read cnt as %d\n",*((int *)rno),cnt);
// Reader acquire the lock before modifying numreader
pthread_mutex_lock(&mutex);
numreader--;
if(numreader == 0) {
sem_post(&wrt);
}
pthread_mutex_unlock(&mutex);
}
我试过这个,虽然这只是让所有读者都可以运行并在之后调用编写器,但我想了解如何一次调用有限数量的读者,然后允许编写器运行。
wrt 是二进制信号量,但如果是计数信号量初始化到极限,这是否有助于实现目标?
【问题讨论】:
-
如果
wrt是一个初始化到极限的计数信号量,它应该可以帮助你实现目标,是的。事实上,这就是你所需要的,如果我没记错的话,实际上有部分代码需要删除。由于使用numreader,当前代码不允许多个阅读器同时阅读。我会删除所有与numreader相关的代码,只留下sem_wait、阅读部分和sem_post。除非我错过了什么。
标签: c computer-science semaphore