工作进程就像工作线程一样?

时间:2017-03-21 09:59:33

标签: c multithreading fork c11 setlocale

我有一个多线程应用程序,它使用一个基本上从磁盘读取文件的库,并将数据流式传输到缓冲区供另一个子系统使用。

现在我通常会用以下两种方式完成此操作:

  • 单线程异步模型;
  • 一个工人主题。

但是有一个约束:库需要默认的"C"语言环境才能生效,而应用程序的其余部分则使用当前的环境语言环境。

因此我想到可能在工作流程中隔离它而不是:

  1. 设置区域设置
  2. 很早就从主线程中分叉了
  3. 将区域设置回滚到子级中的默认值
  4. 从父级(使用SIGSTOP
  5. 停止工作进程
  6. 随着工作的减少(通过SIGCONT
  7. 唤醒它

    有些事情:

    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;
    }
    

    我在多进程编程方面没有多少经验,这就是我提出的所有内容,现在看起来对我来说有点复杂。因此:

    这个问题是否有更合适的方法/模式?这些简单任务是否过重?早期分叉有助于保持孩子的轻量化吗?

0 个答案:

没有答案