在我们的CS课程中,我们使用POSIX线程编程来实现一个简单的堆栈数据结构。因此,我们使用了pthread_cond_wait和pthread_cond_signal:
pthread_mutex_t write_mutex;…
的 Q 强> :我对这个实现的问题是:这不是要求读数之间由于信令而产生的比例为1:1吗?这个 实现不允许在没有任何内容的情况下编写多个项目 读取介于两次写入之间需要触发的信号 读取功能(反之亦然多次读取)。
如果 write() 功能真的类似于 read() 提出的功能,然后是和否。我认为你建议堆栈永远不会有多个元素,但特别是不是这样。注意线程如何进入你的 read() 函数和查找线程非空将绕过等待条件变量。只有堆栈为空时,线程才会等待读取。另一方面的模拟是线程只有在堆栈满容量时才等待写入。
write()
read()
的 Q2 强> 调用pthread_cond_signal(...)后,信号“有效”多长时间?
没时间了。当发出CV信号时,只有已经等待条件变量的线程才能被解除阻塞。之后没有接收到任何信号的存储器,即使没有线程被它解除阻塞。