인프런 커뮤니티 질문&답변

작성자 없음

작성자 정보가 삭제된 글입니다.

운영체제 공룡책 강의

12. 동기화 문제의 해결책: Chapter 6. Synchronization Tools (Part 2)

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

작성

·

175

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을 하겠다는 의미입니다.

작성자 없음

작성자 정보가 삭제된 글입니다.

질문하기