0

考虑以下情况:

2个线程,其中1个应该初始化一些数据,这需要不确定的时间,而另一个线程需要等待。

我遇到的问题:

  • 在两个线程中的任何一个运行之前我什么都做不了,因为我无法控制生成过程(C 代码以类似脚本的方式编译和执行)。
  • 我不知道初始化线程是否在另一个线程之前到达代码中的任何点,因为它们是紧随其后启动的,从我的角度来看,一个执行顺序变得不确定
  • 我需要确保主线程的 init 部分首先运行(例如,其他线程不应该尝试使用未初始化的)
  • 之后我想清理我用于此同步的任何内容,因为这是长时间运行的过程中的一次性事情,即使在内存计数上节省很少。例如,互斥量/信号量应该在之后被销毁。

我怎样才能做到这一点?

编辑:我(不幸地)从最初的问题中遗漏了一个可能不是那么不重要的事情:我可以访问一些可以从所有线程访问的指针,并且在开始时应该为 NULL,所以这可能有助于同步。

编辑2:通过实验我发现“另一个线程”实际上总是被产生并且一个函数被调用并且需要在主线程启动之前返回。不幸的是,我必须在那时等待主线程完成它的工作,这使得整个事情变得不可能。因此,从现在开始,这个问题可以在理论上进行考虑(并且希望再次实用,只要软件的提供者改变了它或提供了一种工作方式)

还添加了 g-wan (web server execution c scripts as servlets/handler/maintenance script) 标签 - 最初我不想添加这个标签,因为问题不是特定于软件的,但它似乎有助于理解“为什么”以及情况;在我的例子中,“主”线程是维护脚本,“其他线程”是连接处理程序。


在软件供应商的支持/帮助下,我的问题已经“解决”了,所以我现在会接受 pthread_cond_wait 的答案,因为据我所知它通常是正确的。

4

2 回答 2

2

假设您正在使用pthread,那么您可以使用pthread_cond_wait来同步线程。当第一个线程完成它的任务时,向条件变量发出信号,第二个线程应该使用pthread_cond_wait等待相同的条件变量。

于 2013-08-08T15:23:24.183 回答
0

1.也许你可以使用other thread作为父线程,它用于fork创建init thread。父使用waitwaitpid等待init thread

2.如果只有两个线程,你可以使用signal。就像init thread完成后一样。它发送一段signal 时间,其他线程自己阻塞并等待信号。一旦收到信号,它就会做干净的工作。

于 2013-08-08T15:10:48.930 回答