• 카테고리

    질문 & 답변
  • 세부 분야

    시스템

  • 해결 여부

    미해결

피터슨 알고리즘쪽질문드립니다 .

21.08.27 18:40 작성 조회수 117

0

강의 너무너무 잘 듣고있습니다 감사합니다 

저 강의를 듣다가 코드를 보는데 

while문에서  조건이있고 {}가 없는데 따로 실행은 없는건가요 

무조건 일단 깃발교체만 하고  sum++로 가는건가요 >?

=============================================cpp 에서는 thread가 있길래 이렇게 구현했습니다

#include <iostream>

#include <thread>

#define true 1

#define false 0

using namespace std;

int sum;

bool flag[2];

int turn;

void producer()

{

int k;

for (int i = 0; i < 10000; i++)

{

//0번이 producer, 1번이 consumer라고 생각 

/*endtry section*/

flag[0] = true;

turn = 1;

while (turn == 1 && flag[1])

;

sum++;

/*exit section*/

flag[0] = false;

}

}

void consumer()

{

int k;

for (int i = 0; i < 10000; i++)

{

//0번이 producer, 1번이 consumer라고 생각 

flag[1] = true;

turn = 0;

while (turn == 1 && flag[1])

;

sum--;

/*exit section*/

flag[1] = false;

}

}

int main()

{

sum = 0;

thread t1, t2;

t1 = thread(consumer);

t2 = thread(producer);

cout << "sum : " << sum << endl;

t1.join();

t2.join();

return 0;

}

답변 1

답변을 작성해보세요.

1

안녕하세요?

while(1);

이렇게 하면 무한 루프를 돌게 되지요?

저 예제에서 while문은 내가 깃발을 획득할 수 있는 조건이 만족되지 않으면 계속 무한 루프를 돌면서 busy waiting을 하겠다는 의미입니다.