【问题标题】:Multithreading,blocking and semaphores多线程、阻塞和信号量
【发布时间】:2012-09-24 17:13:09
【问题描述】:

(1)在多线程进程中,如果一个线程忙于I/O,整个进程会被阻塞吗?

(2) 使用互斥量或二进制信号量哪个更好?什么时候应该使用互斥体,什么时候应该使用二进制信号量?

【问题讨论】:

  • 没有。互斥锁属于特定线程,信号量不属于。
  • 1) No. 2) 你应该几乎总是使用互斥锁而不是信号量。

标签: multithreading operating-system thread-safety pthreads


【解决方案1】:

1)。好吧,在多线程应用程序中,一次只有一个线程分配了 CPU。如果您说您的线程经常忙于 I/O,那么实际上可能会发生所有其他线程一直在队列中等待以获取分配给它们的 CPU。这取决于使用的 CPU allocation algorithm。就像如果线程正在使用Time-Sharing算法,那么当然在时间完成时,当前线程将被发送到队列的后面。

2)。看看这篇文章:-Difference between binary semaphore and mutex

【讨论】:

  • @Abhishek.. 不客气..如果您的问题已解决,您可以接受它作为答案以标记此问题已解决..
  • 通常,执行 I/O 操作允许其他准备运行的线程获取 CPU,(当然在任何具有抢占式调度程序的操作系统上,即几乎所有线程)。
  • 这也取决于忙于I/O操作的线程的优先级。如果它的优先级足够高,就不会被抢占。
【解决方案2】:

1) 在 SMP 环境中,多个线程可以并行运行(在不同的 cpu 上)。在单 CPU 环境中,一次只能运行一个线程。

2) 阅读此diff-binary-semaphore-and-mutex

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-18
    • 1970-01-01
    • 2020-02-29
    相关资源
    最近更新 更多