//co.h文件
#ifndef CO_H_
#define CO_H_
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
#include <limits.h>
#include <assert.h>
#include <inttypes.h>
#include <unistd.h>
#include <pthread.h>
#include <fcntl.h>
#include <sys/time.h>
#include <sys/mman.h>
#include <netinet/tcp.h>
#include <sys/epoll.h>
#include <sys/poll.h>
#include <errno.h>
#define NTY_CO_MAX_STACKSIZE (16*1024) // {http: 16*1024, tcp: 4*1024}
typedef struct _nty_cpu_ctx {
void *esp; //
void *ebp;
void *eip;
void *edi;
void *esi;
void *ebx;
void *r1;
void *r2;
void *r3;
void *r4;
void *r5;
} nty_cpu_ctx;
#endif//
co.c文件
#include"co.h"
int _switch(nty_cpu_ctx *new_ctx, nty_cpu_ctx *cur_ctx);
#ifdef __i386__
__asm__ (
" .text \n"
" .p2align 2,,3 \n"
".globl

本文深入探讨了在C语言环境下协程的实现机制,详细解释了如何通过汇编指令进行上下文切换,以及如何初始化协程堆栈。通过具体代码示例,展示了协程在不同函数间交替执行的过程。
最低0.47元/天 解锁文章
1105

被折叠的 条评论
为什么被折叠?



