uIP에서의 Protothread 원리 분석

uIP는 단일 컴퓨터 시스템에서 TCP/IP 프로토콜의 최소 구현이다.그 중에는 다중 루틴을 시뮬레이션하기 위해 Protothread라는 것이 사용되었다.이 글은 그 원리를 간단하게 분석했다.

Switch case의 특수 용도


먼저 아래의 코드를 보고 foobar(2)의 출력, foobar(3)의 출력을 분석한다.
void foobar(int status)
{
	switch (status)
	{
	case 0:
		printf("Got case0
"); do { case 2: printf("Got case2
"); break; } while (1); printf("Got p2.5
"); if (0) { case 3: printf("Got case3
"); } return; } }
  • 여기서 switch case를 goto로 이해하면 된다.그래서 케이스는while 순환에 넣을 수 있고 문법과 논리 오류도 없습니다.
  • 케이스 2 다음 브레이크, 브레이크 스위치는?아니면break while?여기 브레이크는 while입니다.참조: The break statement terminates the execution of the nearest enclosing do, for, switch, or while statement in which it appears.Control passes to the statement that follows the terminated statement.

  • 이런 switch의 사용법은Protothread에서 현재 조건이 충족되지 않으면 이 함수를 종료할 수 있으며, 입력한 상태에 따라 바로 아까 장소(case)로 이동할 수 있습니다.

    Protothread


    Protothread는 위의 switch case 문장을 매크로 정의로 봉인합니다.Protothread는 현재 상태를 기록하는 변수를 사용합니다(문장줄 LINE).case의 곳은 바로LINE__,현재 조건이 계속 실행에 부합되지 않으면 이 함수를 종료하고 현재 상태를 로 표시합니다LINE__,다음에 이어서 집행하겠습니다.사용할 때는 현재의 논리에만 관심을 가지면 된다.

    좋은 웹페이지 즐겨찾기