ipc延迟了线程应用程序上的不同原语

时间:2013-10-22 18:28:44

标签: windows multithreading operating-system ipc

我正在为Windows编写多线程应用程序。它有一个后台线程/线程,它们生成被提供给UI线程的对象。 当没有工作我想要UI线程睡觉。为了实现线程之间的同步,我可以想到多个选项。但是,我想知道在上下文切换方面每个基元的夸克是什么。

后台线程可能希望连续运行,并希望在精确正确的时刻唤醒UI线程。

  1. 条件变量/信号量:我可以使用共享内存传递数据,使用cond.var或信号量进行同步。在那种情况下,上下文切换何时发生?它是在我发出信号的那一刻发生的,还是在一个线程的量子结束之后发生的。一个比其他更好吗?

  2. 套接字:我可以在每个线程中运行服务器和客户端,并且可以创建流而不是共享内存。我认为这里的上下文切换将在时间量子结束时发生。

  3. 还有其他选择吗?

  4. 由于

1 个答案:

答案 0 :(得分:0)

最好使用method1,因为它使用共享内存,单个进程内存与同一进程中的其他线程进行通信。优点是在2的情况下没有ipc开销(如send / recv或write / read)。

在两种情况中的任何一种情况下,等待条件变量,锁定或等待套接字读取数据的线程将进入等待状态,这意味着它将从运行队列中被调度。一旦线程调用pthread_cond_wait或pthread_mutex_lock,就会触发一个系统调用(如果是linux)并使调用线程进入休眠状态。在套接字的情况下,调用recv的线程将被置于休眠状态。