等待pthread中多个资源的条件

时间:2010-02-16 10:08:37

标签: conditional pthreads signals

我有许多数据容器,可以在有更新时发送信号。结构看起来像这样:

typedef struct {
  int data;
  /*...*/
  pthread_cond_t *onHaveUpdate;
} Container;

onHaveUpdate是指向所有容器共享的全局条件的指针

在我的应用程序中,我有许多这些结构,它们可以由不同的线程同时更新。

现在,我是否可以拥有一个侦听条件的线程,并且可以在发送通知的容器上执行某些操作?

我知道这可以通过每个容器使用一个线程来解决,但它感觉浪费资源,但我想知道是否只使用一个线程来完成所有容器?

1 个答案:

答案 0 :(得分:0)

问题在于您的条件是由所有容器共享的,因此当您发送某些内容已更改的条件时,您不知道 已更改的内容。由于应用程序的体系结构不是从上下文中100%清除,为什么不实现保存事件的Queue(以及指向容器的指针被推送到该Queue)以及从该waitqueue获取事件并执行工作的工作线程。这样你的工作队列就需要在队列被填满的条件下等待(或者以非侵略性的while-true-fashion方式运行),这样你就可以完全从容器中删除条件变量。