让一个类完全在自己的线程上运行
Having a class run entirely on its own thread
如果我执行类似class myclass : public somelibrary::thread
的操作
myclass
上调用的所有方法是否都在自己的线程中执行- 是否只有
run()
在自己的线程中执行 - 对于每个要在自己的线程中执行的方法,我是否必须在每个方法中创建一个新线程
如果我做类似
class myclass : public somelibrary::thread
的事情这是否意味着在myclass上调用的所有方法都将在中调用他们自己的线索?
不一定。这取决于somelibrary::thread
的设计。事实上,Boost.Thread并不是这样使用的(通过继承)。在这种情况下,只需创建一个新的boost::thread
对象,将一个可调用对象(函子、函数指针等)传递到其构造函数中。
然而,我还没有看到任何线程库在somelibrary::thread
派生的类上调用任何方法都会产生新的线程。这就要求数据竞赛,除非一切都以某种方式同步。但是,您的代码在等待同步原语时会浪费大量时间。更不用说线程在操作系统资源方面相对昂贵。假设一个应用程序不是由白痴设计的,那么它在任何时候都可能最多有几个线程在运行。另一方面,在应用程序运行期间,可以多次调用方法。
在这样的"run"方法中,唯一在它自己的线程中运行的东西线
并非所有线程库在运行新线程时都调用run()
方法。例如,在Boost.Thread
中,入口点是operator()()
。但是,是的,入口点在它自己的线程中运行,与调用线程分离。run()
直接或间接调用的所有方法都在新派生的线程中运行。
如果只有run方法在它自己的线程中执行,如果我想在自己的线程中调用的每个方法,而不仅仅是那个方法?
这几乎肯定不是您在C++中实际想要的,因为线程在操作系统资源方面非常昂贵。你会让你的操作系统一直在浪费时间分配和销毁线程。即使在像Erlang这样的语言中,线程与操作系统线程相比非常便宜,通常也不会为每个方法生成一个新线程。运行多个线程或不断创建/破坏线程的程序是程序设计不好的标志。
我必须在每个方法中创建一个新线程吗?
是的,如果你希望每个方法都在自己的线程中运行,但同样,你几乎肯定不希望这样。
- 如何将元素添加到数组的线程安全函数?
- 异常属于C++中的线程还是进程
- C++中的线程安全删除
- 类与私有变量的其他类之间的线程安全性
- CoInitialize()在单独的线程上崩溃而不返回
- c++中的线程池
- 共享队列的线程安全
- C++ 中的线程不能使用参数
- 虚假唤醒是否会解锁所有等待线程,甚至是不相关的线程?
- 在自己的线程中从 ttyUSB0 读取
- IOCP是否创建自己的线程
- ISO禁止启动自己类方法的线程
- worker是否可以在Qt中使用信号/插槽连接停止自己的线程?
- 在 MFC 对话框和自己的线程上的 OpenGL 控件之间传递消息
- hiredis Redis 库是否为异步回调创建了自己的线程
- 如何在C++中实现自己的线程安全共享指针
- NSURLConnection在其自己的线程中没有旋转循环就无法工作
- 让一个类完全在自己的线程上运行
- 如何在遗留c++上创建自己的线程池?
- 如何在自己的线程上运行时钟