【发布时间】:2020-04-18 23:24:57
【问题描述】:
我正在编写仅使用 1 个线程(主线程除外)的应用程序。线程只存活很短的时间,比如 50 毫秒。但是,它应该每秒发生多次。并且除了激活时间之外,应该停止线程,并且应该运行主线程。
例如 50ms thead 做某事 -> 20ms main 做某事 -> 50ms thread 某事 -> 20ms main 什么都不做 ....
我首先认为线程恢复/停止会很好。但是,它比线程创建/销毁更好吗?比如线程创建->线程删除->线程创建->线程删除……
当我使用线程创建/销毁策略时,我使用线程构造函数和 thread.join() 来完成,并使用 1 个原子变量来知道何时完成。
当我使用线程恢复/停止策略时,我使用了 conditional_variable、mutex 和 condition_variable.wait()。
我预计线程恢复/停止策略有更好的性能。 但是,它看起来不像那样。看起来两者的性能和内存/cpu 使用率几乎相同。
【问题讨论】:
-
并非每个例程/函数/方法/运算符都有标签。请从列表中选择标签并阅读他们的维基。标记join 用于关系数据库运算符。
-
最好使用后一种方法。线程创建是一项昂贵的操作,因此最好使用第二种方法。
-
我还希望保留线程可以减少工作量,但运行时可能不会每次都给你一个新线程。它可能有一个隐藏在 deepdark 中的线程池,只是一遍又一遍地重复使用相同的线程而不告诉你。
-
每个应用程序至少有一个线程,它是执行
main()的线程。我猜你的第一段是想说你开始一个额外的线程,对吧? -
@Ulrich 是的,包括主线程,总共有2个线程。
标签: c++ multithreading mutex condition-variable