

while (true) {
while (counter == BUFFER_SIZE);
/* do nothing */
buffer[in] = next_produced;
in = (in+1) % BUFFER_SIZE;
counter++;
}while (true) {
while (counter == 0);
/* do nothing */
next_consumed = buffer[out];
out = (out+1) % BUFFER_SIZE;
counter--;
}register1 = counter
register1 = register1 + 1
counter = register1register2 = counter
register2 = register2 - 1
counter = register2register1 = counter
register1 = register1 + 1
counter = register1
register2 = counter
register2 = register2 - 1
counter = register2
OR
register2 = counter
register2 = register2 - 1
counter = register2
register1 = counter
register1 = register1 + 1
counter = register1do {
while (turn == j); /* entry section */
/* critical section */
turn = j; /* exit section */
/* remainder section */
} while (true);do {
flag[0] = true;
turn = 1;
while (flag[1] && turn == 1);
/* critical section */
flag[0] = false;
/* remainder section */
} while (true);do {
flag[1] = true;
turn = 0;
while (flag[0] && turn == 0);
/* critical section */
flag[1] = false;
/* remainder section */
} while (true);boolean test_and_set (boolean *target)
{
boolean rv = *target;
*target = TRUE;
return rv; /* target의 오리지널 값을 리턴 */
}
do {
while (test_and_set(&lock))
; /* do nothing */
/* critical section */
lock = false;
/* remainder section */
} while (true);
int compare_and_swap (int *value, int expected, int new_value)
{
int temp = *value;
if (*value == expected)
*value = new_value;
return temp; /* value의 오리지널 값을 리턴 */
}
do {
while (compare_and_swap(&lock, 0, 1) != 0)
; /* do nothing */
/* critical section */
lock = 0;
/* remainder section */
} while (true);
do {
waiting[i] = true;
key = true;
while (waiting[i] && key)
key = test_and_set(&lock);
waiting[i] = false;
/* critical section */
j = (i + 1) % n;
while ((j != i) && !waiting[j])
j = (j + 1) % n;
if (j == i)
lock = false;
else
waiting[j] = false;
/* remainder section*/
} while (true);
acquire() {
while (!available)
; /* busy wait */
available = false;
}
release() {
available = true;
}
참고 자료 : Operating System Concepts Essentials
*이미지 자료는 교재 자료를 직접 다시 만든 것으로 무단 불펌 금지입니다
끄읏!