, . hardware , / .
, , . , .
Test-and-Set ( 1)
Test-and-Set, 1, ,
int Test_and_Set (int *target){
int tmp = *target;
*target = 1;
return tmp;
}
-,
shared int lock = 0;
while (some condition) {
while(Test_and_Set(&lock));
Critical section
lock = 0;
Remainder section
}
, . , .
Swap ( )
Swap, , ,
void Swap (int *a, int *b){
int tmp = *a;
*a = *b;
*b = tmp;
}
Swap, , key :
shared int lock = 0;
int key;
while (some condition) {
key = 1;
do Swap(&lock,&key);
while (key);
Critical section
lock = 0;
Remainder section
}
6.
, . , , . , . , : H , L . , , , CPU burst ( ). , L , H, , , . H , , L , .
|
|
: , , .
, , , (Dijkstra) 1965 .
, , , , : P ( proberen ) V ( verhogen ). :
P(S): | S <= 0 S; S = S 1; |
V(S): | S = S + 1; |
: P S . 0, S 1. 0, , S 0, S 1. V S 1.
, , :
P(S): | S <= 0 S; S = S 1; |
V(S): | , S S = S + 1; |
- . (, ALGOL-68), . . P V, , , . P , , , FIFO.