c++ - 如何在另一个线程中执行一个方法?

标签 c++ c multithreading design-patterns class-design

我正在寻找用 C 或 C++ 解决这个问题的方法。
编辑:澄清。这是在linux系统上。特定于 Linux 的解决方案绝对没问题。跨平台不是问题。

我有一个在自己的线程中运行的服务。该服务是一个具有多个方法的类,其中一些方法需要在自己的服务线程中运行,而不是在调用者线程中运行。

目前,我正在使用包装器方法来创建具有输入和输出参数的结构,将结构插入队列并返回(如果“命令”是异步的)或等待其执行(如果“命令”是异步的)同步)。

在线程端,服务被唤醒,从队列中弹出一个结构,找出要执行的内容并调用适当的方法。

此实现有效,但添加新方法非常麻烦:定义包装器、带参数的结构和处理程序。我想知道是否有一种更直接的方法来编写这种模型:在类自己的线程上执行的类方法,而不是在调用者的线程中执行。

编辑 - 一种结论:
似乎没有事实上的方法来实现我所要求的不涉及额外编码工作的方法。
我会坚持我的想法,它确保类型安全,最大限度地减少锁定,允许同步和异步调用,并且开销相当适中。
另一方面,它需要一些额外的编码,并且随着方法数量的增加,分派(dispatch)机制可能会变得臃肿。在构造时注册分派(dispatch)方法,或让包装器完成这项工作似乎可以解决问题,减少一些开销并删除一些代码。

最佳答案

我对这个问题的标准引用是here .

Implementing a Thread-Safe Queue using Condition Variables

正如@John 指出的,这使用了 Boost.Thread。

我会小心您在此处描述的同步情况。如果生产者(发送线程)等待消费者(服务线程)的结果,很容易出现性能问题。如果您收到 1000 个异步调用,用积压填满队列,然后每个生产者线程都进行同步调用,会发生什么情况?您的系统将“装死”,直到队列积压清除,释放那些同步调用者。如果可以,请尝试仅使用异步来解耦它们。

关于c++ - 如何在另一个线程中执行一个方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4269104/

相关文章:

c++ - 以这个程序中使用的方式使用互斥量是否正确?

c++ - OpenCV:HOGDescriptor.compute

c++ - 无法从映射中恢复指向成员函数的指针

c - 如何为端口引脚分配特定的[x]值?

c - 全局结构数组

python - 使用线程获取文件中每个单词的计数

android - FileObserver 实例正在被垃圾收集

c++ - 为什么 long int 数据类型的左位移 << 不超过 31?

c++ - 飞扬的鸟旋转算法

输出中的逗号分隔