【问题标题】:How to do multithreading with getcontext() and setcontext()?如何使用 getcontext() 和 setcontext() 进行多线程处理?
【发布时间】:2019-02-04 16:24:28
【问题描述】:

如果我理解:多线程允许有多个执行线程。所以在一个线程做某事期间,另一个线程做其他事情而不等待另一个线程。但是当我使用 getcontext()setcontext() 时,我的印象是线程等待另一个线程继续执行。请给我一个例子,说明如何使用 getcontext()setcontext() 进行多线程处理?

【问题讨论】:

  • 您应该出示您的minimal reproducible example 并向我们提供完整的上下文:什么编译器、运行时环境以及您可能使用的任何特殊库。请注意,C 语言本质上不是多线程的,而是依赖于其他 API。这个问题实际上可能是重复的:stackoverflow.com/q/7774778/1531971
  • 这个问题有一些相当广泛的含义,但基本上 GetThreadContextSetThreadContext 在单个特定线程上工作,因此它们本身不会购买你以前没有的多线程have - 可能是模拟并发,但不是多线程。

标签: c multithreading function ucontext


【解决方案1】:

setcontext()getcontext()makecontext()swapcontext() 提供了设置多个轻量级执行线程。它们通常被称为协程。在 GLIBC/Linux 环境中,它们被设置在一个进程中。它们不受操作系统调度程序的控制。实现它们的程序员有责任从一个切换到另一个。当我们在进程的上下文中运行时,我们并不是完全并行,而是在模拟并行:这是伪并行

makecontext()manual 的“示例”部分显示了一个实现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-27
    • 1970-01-01
    • 1970-01-01
    • 2019-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-17
    相关资源
    最近更新 更多