Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 14222|Válasz: 0

[Kommunikáció] Betekintés a Java és az I++ szálbiztonság alapvető típusaiba

[Linket másol]
Közzétéve 2015. 04. 05. 22:17:45 | | |

A Java-ban a többi alapvető változó atomi, kivéve a Long és Double 8 bájtos, 64 bites változókat.


A Java tárolómodell megköveteli, hogy mind a get, mind a tárolt műveletek atomosak, de nem volatilis hosszú és dupla változók esetén a JVM lehetővé teszi egy 64 bites olvasási vagy írás két 32 bites műveletre osztását.

Ha az olvasás és írás különböző szálakon történik, egy nem volatile típusú hosszú olvasás magas 32 bitet eredményezhet az egyik értékben, a másikban pedig alacsony 32 bitet.

Tehát még ha nem is érdekel a lejárt adatok, lehet, hogy nem biztonságos megosztott, változtatható hosszú és dupla változókat használni egy többszálas programban, hacsak nem nyilvánítják őket volatilnak vagy zárolva védenek.


Atomi műveletekről beszélve, ez azt jelenti, hogy az olvasás és az írás atomi, például i=5; Ez egy atomi művelet.

Azonban, ha két atom működését együtt végzik, az nem feltétlenül atomi, például először olvasás, majd írás, akkor lehetséges, hogy a változó az olvasás után módosítódott.

i++ ilyen művelet, először olvassuk, majd írjuk, így az egész szám változó atomi, nem pedig az i++ atomi művelet.

Amikor for(int i=0; i<10000; i++){System.out.print(i)}

Azt fogod látni, hogy végül nem fogok 10 000-et nyomtatni, és kb. 8-9 ezer példányt fogok kinyomtatni.


De a többszálas megoldás esetén, még ha az egész szám változó atomi is lehet, előfordulhatnak szálbiztonsági problémák, ami szál láthatósági probléma, ezért hozzá kell adni egy volatil állítást.

Ez a módosító egy kényszerített változó, amelyet minden alkalommal memóriából olvasnak, és nem tárolják a regiszterekben.




Előző:Az SQL 2008 hibaüzenettel ad értesítést (szolgáltató: SQL Network Interfaces, hiba: 25 - Kapcsolati szó).
Következő:[Fast and Furious 7] bemutatja a 2.12G DVD-t Az interneten a legtisztább verzió
Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com