O condiție cursă
În acest termen, există alte utilizări, a se vedea. Racing.
condiție cursa (condiție cursa engleză.) - eroarea de proiectare sistem multi-threaded sau aplicație în care funcționarea sistemului sau a cererii depinde de ordinea în care sunt executate părți ale codului. Numele erorii obținute printr-un circuit electronic erori de proiectare similare (vezi. Semnale Racing).
Stare Race - „plutitoare“ de eroare (heisenbug), prezentat la momente aleatorii și „intermitent“ atunci când încercați să-l localizeze.
Luați în considerare exemplul codului (în Java). Fie x = 0. Să presupunem că programul are loc în următoarea ordine: O metodă mai complexă, dar, de asemenea, mai universale de rezolvare - sincronizare fir, și anume: Acolo se întâmplă înainte de semantica nu necesită cuvinte cheie volatile. Să presupunem că variabilele - două (și cuvântul cheie volatile nu funcționează), iar al doilea flux în loc de valoare System.out.println de procesare mai complexe. În acest caz, ambele metode nu sunt satisfăcătoare: prima - astfel încât o variabilă poate fi modificată în timp ce cealaltă este copiat; în al doilea rând - pentru că prea mare volum sincronizate de cod. Aceste metode pot fi combinate prin copierea variabilelor „periculoase“ într-un bloc sincronizat. Pe de o parte, se va elimina o limită de instrucțiune mașină, pe de altă parte - va scăpa de prea mult de sincronizare. modalități de a identifica și evidente care se stabilesc condițiile de rasă nu există. Cel mai bun mod de a scapa de curse - proiectarea corectă a unui sistem multi-tasking. Aparate de radioterapie Therac-25 a fost primul dispozitiv medical din SUA, în care problemele de securitate au fost atribuite în mod exclusiv la software-ul. Acest dispozitiv funcționează în trei moduri: Aceste trei moduri au fost stabilite disc rotativ, în care o gaură a fost Devierea magneți pentru țintă terapia de electroni și o lentilă pentru o radiografie. Din cauza o condiție cursă între programul de control și de tratare a tastaturii, uneori, sa întâmplat că, în raze X modul drive terapie este în poziția „E-terapie“, iar pacientul este iradiat direct cu un fascicul de electroni de 25 MeV, ceea ce duce la supraexpunere. În acest caz, terminalele senzorului de „doză zero“, astfel încât operatorul poate repeta procesul, exacerbarea situației. Ca urmare, omorând cel puțin patru pacienți. Unele cod a fost luat de la Therac-6 și Therac-20. În Therac-6 nu au avut terapie cu raze X, iar în Therac-20 au fost măsuri de securitate bazate pe hardware, care nu sunt permise pentru a porni lumina când discul a fost în poziție greșită. Există o clasă de erori (și de a exploata tipurile lor de atac), care permit programul non-privilegiat afecta alte programe prin capacitatea de a schimba resursele publice (de obicei -. Fișiere temporare de rasă engleză / tmp - o condiție cursă în directorul temporar), într-un anumit interval de timp, în care de eroare de fișier programator este scris de toate sau o parte a utilizatorilor sistemului. Programul Atacarea poate distruge conținutul fișierului, determinând programul să se prăbușească victimă, sau înlocuirea stabilit programul pentru a efectua o acțiune la nivelul privilegiilor lor de date. Acesta este motivul pentru care software-ul cu cerințele de securitate severe, cum ar fi un browser web. Acesta utilizează numere aleatoare de calitate criptografic pentru a denumi fișierele temporare.
moduri de a rezolva
copie locală
sincronizare
metoda combinată
cu Therac-25 caz
Break-uri prin exploatarea unei condiții de rasă
notițe