Kirjoittaja Aihe: BASH:in semafori ?  (Luettu 1311 kertaa)

petteriIII

  • Käyttäjä
  • Viestejä: 657
    • Profiili
BASH:in semafori ?
« : 21.01.13 - klo:11.49 »
Löytyhän se semafori, mutta jonkinsorttista epävarmuutta siinäkin oli, joten ei se käyttökelpoinen vielä ole ja poistin koko homman. Pitää tonkia syvemmältä.

Yksi toimintavarma keino on, mutta siinä pitää kylläkin painaa enteriä. Laita vaan ongelmapaikkaan: read -p 'paina enter'
« Viimeksi muokattu: 21.01.13 - klo:16.01 kirjoittanut petteriIII »

petteriIII

  • Käyttäjä
  • Viestejä: 657
    • Profiili
Vs: BASH:in semafori ?
« Vastaus #1 : 30.03.13 - klo:23.30 »
Tämä kaipaa selvennystä ja nyt se on hyvä antaa kun asia ratkesi: BASH:issa tosiaan on semafori - toteutettuna yhdellä käskyllä.

Kun kone kykenee ajamaan useaa prosessia samanaikaisesti etenevät prosessit eri nopeuksilla, ja joskus eteen tulee tilanteita joissa yksi prosessi ei saa suorituksessa edetä jonkun pisteen yli ennenkuin toinen prosessi on ylittänyt saman paikan: tästä nimi semafori elikkä: odota tässä niin kauan että toinen on mennyt ohi.

Minun ongelmani oli: kun skripti laittaa tiedoston editoitavaksi niin editori vain ottaa näytön ja näppäimistön itselleen ja antaa skriptin jatkaa tausta-ajona: ihan asiallinen toiminta joka tuo esiin kaksi piirrettä:
1. Skripti voi siellä taustalla toimiessaan lähettää editoriin lisää editoitavaa - lisä-editoitavat avaavat editorissa oman lehden samaan editori-ikkunaan.
2. Jos skripti siellä taustalla tekee editoitavalle jotakin niin se tekeekin sen editoimattomalle versiolle - tai joskus toiminta voikin kohdistua editoituun versioon.

- koska halusin toimia aina sen editoidun version kanssa laitoin editori-kutsujen jälkeen näppäimistön luvun elikkäs pyynnön painaa enteriä. Pyyntö painaa enteriä meni virtuaalinäyttöön joka siirrettiin fyysiseen näyttöön vasta kun editori lopetti ja siirsi skriptin taas edusta-ajoksi ja luovutti skriptille näppäimistönkin. Kun pyyntö painaa enteriä tuli näyttöön painoin enteriä ja nyt toiminta kohdistui aina editoituun versioon.

- näppäimistön lukemista ei kannata semaforina käyttää, sillä se vaatii myöhemmin painamaan enteriä ennenkuin homma jatkuu. Sensijaan kannattaa käyttää käskyä wait sillä prosessi jatkaa suoritustaan automaattisesti kun "toinen on mennyt ohi".
- semafori-käsky on:  wait $!    silloin kun prosesseja on useita ( $! on edellisen prosessin PID )
- esimerkiksi käskyssä: "man ls>delme;gedit delme;rm delme"    rm hävittää tiedoston delme heti, joten näennäisesti editori editoisi tyhjää. Sensijaan käskyssä: "man ls>delme;gedit delme;wait;rm delme"  rm hävittää tiedoston delme vasta kun lopetat editorin.  
« Viimeksi muokattu: 12.05.13 - klo:13.06 kirjoittanut petteriIII »