问题基本上是,当你睡觉时,你什么也做不了。通常,您希望在尽可能短的时间内“处于”临界区。您在临界区中花费的时间越长,任何其他线程必须等待进入它的时间就越长。
通常,I/O 几乎肯定应该在任何临界区之外进行。举个例子,如果你正在读取一些数据,你会想要读取数据,然后进入临界区并将数据添加到某个结构中,以便其他所有内容都可以看到它(例如,添加一个带有指向该数据的指针的节点)数据转换为向量),然后离开 CS。
在 CS 中执行 I/O 本身几乎从来没有一个很好的理由——你通常只有一个线程来执行 I/O,并有一个队列(或双端队列,或其他)来处理对或该线程的输出。向队列中添加内容或从队列中读取内容受到 CS(或者可能是信号量等)的保护,但发生得很快,因此一个线程可以完成它的工作,然后迅速让开,以便其他线程也可以。
| 归档时间: |
|
| 查看次数: |
2173 次 |
| 最近记录: |