之后如何等待其他线程初始化并正确清理?

时间:2013-08-08 15:00:44

标签: c multithreading synchronization g-wan

考虑以下情况:

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

我遇到的问题:

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

我怎样才能做到这一点?

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

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

还添加了g-wan(web服务器执行c脚本作为servlets /处理程序/维护脚本)标记 - 最初我不想添加此标记,因为问题不是特定于软件,但似乎它可能帮助理解“为什么”以及情况;我的案例中的“主”线程是维护脚本,“其他线程”是连接处理程序。


我的问题已在软件供应商的支持/帮助下“解决”了,所以此时我会接受pthread_cond_wait的答案,因为就我所说,这通常是正确的。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

1.也许您可以使用other thread作为父线程,并使用fork创建init thread。家长使用waitwaitpid来等待init thread

2.如果只是两个线程,你可以使用signal。在init thread完成之后。发送signal,而其他线程阻塞自己并等待信号一旦收到信号,就会清理工作。