1

我想为我的线程类创建一个构造函数,它可以创建一个线程,并且它应该在线程开始在入口点运行时返回

入口点将是一些将在运行时传递的类函数。派生类函数不能更改,它不会更新任何可以检查的共享变量。

如何确保我创建的 pthread 在我指定的入口点开始执行

4

2 回答 2

4

这不是一个好主意。

首先运行基类的构造函数。因此,如果在线程到达入口点之前基类构造函数没有返回,那么线程正在一个构造函数尚未运行的对象内运行。因此完全是外行。

如果入口点是在派生类型中定义的虚拟方法,那么您肯定调用了未定义的行为。

这也是为什么大多数线程类不是这样设计的原因。通常你创建线程对象。然后调用一个方法,例如start()运行作为参数传递的函数/方法或可运行对象。这样您就知道代表线程的对象已完全构造,并且所有成员都已正确初始化。

于 2012-10-24T20:20:29.510 回答
0

您将需要使用同步原语来做到这一点,例如屏障。您可以简单地用一个不同的入口点包装您获得的入口点,该入口点发出此同步原语的信号,然后调用其基本入口点。

如果没有看到您要完成的任何实际代码,就没有什么可以说的了。

于 2012-10-24T20:14:36.610 回答