Realizacja semafora binarnego

sobota, 21 kwietnia 2007 18:45
Drukuj
Ocena użytkowników: / 3
SłabyŚwietny 
Realizacja  funkcji wait atomowo-niepodzielnie
 
void  wait_bin(int* _bin_semafor){
        _asm {  
             mov  eax,0x01
             mov  edx,[_bin_semafor]
         _xx:    xchg [edx],eax
             test eax,eax
             jnz  _xx
             }
}
 

Realizacja  funkcji signal atomowo-niepodzielnie
 
void  signal_bin(int* _bin_semafor){
        _asm{   
            mov eax,[_bin_semafor] //*_bin_semafor=0;
            mov [eax],0x00
            }
}
 
Użycie semafora
 
int semafor;
semafor=0;
wait_bin(&semafor) ;
//semafor będzie równy 1
//inne procesy będą się tu blokowały
//SEKCJA  KRYTYCZNA
signal_bin(&semafor);
//podniesienie semafora (nadanie wartości 0)
//czyli zwolnienie sekcji krytycznej