【发布时间】:2021-03-16 14:00:35
【问题描述】:
我对此有三个初步的想法
- 首先是某种计数器? (也许使用互斥锁?)
- 某种信号量? (我不太了解这些)或者可能是
promise/future组合 - 其他类型的信号/槽机制,类似于由 CTRL-C(SIGINT 等)创建的信号
我正在开发一些利用分离线程来完成某些工作的软件。不幸的是,线程并没有很好地清理,它们只是在执行结束时退出。这对于一个方向的通信很好(即;main() 可以先退出),但不会反过来工作 - 目前main() 无法知道线程何时完成工作并优雅地退出。
扩展这些要点...
我最初的想法是有一个受保护的变量区域 - 可以是一个计数器或一组标志,每个线程一个,并使用互斥锁访问这些。如果每个分离的线程使用一个变量来表示线程工作的结束,甚至可能不需要互斥锁,因为main() 将“轮询”这些变量,这是一种只读操作。只有分离的线程本身需要写访问。如果多个分离线程使用相同的计数器/变量,则需要使用互斥体。
我的下一个想法是使用信号量(我真的一无所知)或promise/future 组合,我认为可以作为一种选择。
最后的想法是某种信号机制,比如可能“窃取”一个 SIGxyz 信号(如 SIGINT)并使用它来传达线程执行结束的某种方式。不过我对这个没有信心。
我的问题是真的 - 这应该怎么做?这个问题的典型工程解决方案是什么?
(最后的想法:使用文件还是管道?看起来有点复杂?)
【问题讨论】:
-
您想要某种“自动”信号,还是可以轮询状态?
-
我还没有看到使用分离线程的案例,这不是设计缺陷。包括我自己使用的分离线程,这是设计缺陷。
-
你能访问/修改线程实现吗?
标签: c++ multithreading ipc