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
« poprzednia | następna » |
---|