C/C++實現協程API

協程可以很方便在一個線程中實現多個函數間的切換執行,如果某個函數需要等待,則可以切換到其他函數,這可以很大程度提高一個線程的利用率,因此現在很流行;c++很多版本原生並沒有提供協程,但是由於c++支持內聯彙編,所以實現一套協程api並非難事,只要實現函數間的上下文切換,其他的就容易多了,上下文切換通常就是保存當前函數的寄存器,由於是主動切換所以需要保存的寄存器也就很少了,下面給出一種協程的實現方式:

coroutine.h

#ifndef M_COROUTINE_H
#define M_COROUTINE_H
//coroutine info
typedef struct
{
    unsigned int id;
    int flag;
    int sleep_end_time;

    void* stack_start;
    void* stack_end;
    void* stack_top_p;

    void* parameters;
    void (*task)(void*);
}MCoroutine;

MCoroutine* alloc_co();
void append_co(MCoroutine* co);
MCoroutine* pop_co();
bool CreateCoroutine(void (*task)(void*), void* args);
void Schedule();
void RunTask();

#define co_yield Schedule();
#define print(str,...) printf(str##"\n",__VA_ARGS__)

#endif

coroutine.cpp

#include <iostream>
#include <windows.h>
#include <list&
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章