【发布时间】:2019-08-03 23:21:41
【问题描述】:
在我们的 CS 课程中,我们使用 POSIX 线程编程来实现
一个简单的栈数据结构。因此我们使用了pthread_cond_wait 和pthread_cond_signal:
pthread_mutex_t write_mutex;
pthread_mutex_t read_mutex;
pthread_cond_t write_cond;
pthread_cond_t read_cond;
int read()
{
pthread_mutex_lock(&read_mutex);
while(is_empty())
{
pthred_cond_wait(&read_cond, &read_mutex);
}
// read value [...]
pthread_cond_signal(&write_cond);
pthread_mutex_unlock(&read_mutex);
return read_value;
}
write 函数的实现方式类似,但锁定 write_mutex 并改为发送 read_cond 信号。
问: 我对这个实现的问题是:由于信号传输,这是否不需要读取和写入之间的 1:1 比率?此实现不允许在没有任何读取的情况下写入多个项目,因为每次写入都需要在读取函数中触发信号(反之亦然,多次读取)。
我的理解是正确的还是我遗漏了什么?
Q2调用pthread_cond_signal(...)后,信号“有效”多长时间?
【问题讨论】:
标签: c multithreading thread-safety pthreads posix