我有一个多线程应用程序,它使用一个基本上从磁盘读取文件的库,并将数据流式传输到缓冲区供另一个子系统使用。
现在我通常会用以下两种方式完成此操作:
但是有一个约束:库需要默认的"C"
语言环境才能生效,而应用程序的其余部分则使用当前的环境语言环境。
因此我想到可能在工作流程中隔离它而不是:
SIGSTOP
)SIGCONT
)有些事情:
int main(...) {
setlocale(LC_ALL, ""); // apply current locale
// mmap shared memory, allocate synchronization primitives..
pid_t worker = fork();
if (worker == 0) {
setlocale(LC_ALL, "C"); // apply default C locale
do_grunt_work(); // loop somehow, waiting for command from parent
_Exit(EXIT_SUCCESS);
}
// stop child execution
// do parent stuff..
// raise termination flag and resume child execution
waitpid(worker, NULL, 0); // join
return 0;
}
我在多进程编程方面没有多少经验,这就是我提出的所有内容,现在看起来对我来说有点复杂。因此:
这个问题是否有更合适的方法/模式?这些简单任务是否过重?早期分叉有助于保持孩子的轻量化吗?