【发布时间】:2021-10-20 20:52:22
【问题描述】:
我在辅助线程中有一个简单的 ONC RPC 服务器。我的 C/C++ 应用程序将被移植到 Linux、macOS 和 Windows(计划通过 MinGW-w64)。 RPC 服务器在 Linux 和 macOS 上运行和测试;问题是我找不到任何方法来停止 macOS 上的辅助线程:svc_run() 卡在__select_nocancel 中,而且,正如它的名字一样,我找不到取消它的方法。
这是我尝试过的:
- 将
svc_run()替换为my own select loop,并添加the self-pipe trick。这在 macOS 和 Linux 上都很好用,但是由于未知原因,RPC 调度程序svc_getreqset()没有调用我的服务(Linux 和 macOS 都没有)。 - 在线程上调用
pthread_cancel()(适用于 Linux,不适用于 macOS)。 - 调用
pthread_kill()将 SIGUSR1 发送到线程(适用于 Linux,不适用于 macOS)。 - 通过 localhost 向自己发送一个特殊的 RPC 调用,并让服务器在收到后自行终止(在 Linux 上工作,而不是在 macOS 上工作,但无论如何它太复杂了)。
我愿意接受任何和所有建议!
提前致谢!
【问题讨论】: