"హాయ్, అమిగో!"
"అవును, నేను ఇక్కడ ఉన్నాను, నేను ఇక్కడ ఉన్నాను."
"ఈ రోజు, ఆచరణలో సమకాలీకరించబడిన వాటిని ఉపయోగించడం గురించి నేను మీకు చెప్తాను ."
"ఒక ప్రోగ్రామ్ అనేక వస్తువులు మరియు థ్రెడ్లను కలిగి ఉన్నప్పుడు, బహుళ థ్రెడ్లు ఒకే వస్తువుతో ఏకకాలంలో పని చేయడం తరచుగా జరుగుతుంది. అలా చేయడం వలన, థ్రెడ్లు ఒకదానితో ఒకటి జోక్యం చేసుకుంటాయి."
"అవును, ఇది నాకు ముందే తెలుసు."
"కాబట్టి, మీరు బహుళ థ్రెడ్ల ద్వారా ప్రాప్తి చేయబడుతున్న వస్తువును కలిగి ఉన్నారని అనుకుందాం. సమస్యలను నివారించడానికి మీరు రెండు పనులు చేయవచ్చు."
"మొదటిది ఆబ్జెక్ట్ యాక్సెస్ చేయబడిన ప్రతి లొకేషన్ను చుట్టడానికి సమకాలీకరించబడిన బ్లాక్లను ఉపయోగించడం. అయితే కొంతమంది ప్రోగ్రామర్లు సింక్రొనైజ్ చేయబడిన బ్లాక్ లేకుండా నేరుగా ఆబ్జెక్ట్ను యాక్సెస్ చేసే కోడ్ను వ్రాస్తే ఈ విధానం పని చేయకపోవచ్చు."
"అందువల్ల, రెండవ విధానం ఎక్కువ సమయం ఉపయోగించబడుతుంది-ఆబ్జెక్ట్ థ్రెడ్-సురక్షితంగా చేస్తుంది." "మరో మాటలో చెప్పాలంటే, సమకాలీకరించబడిన మెకానిజం ఆబ్జెక్ట్లోనే నిర్మించబడింది: ఇది దాని పద్ధతులను సమకాలీకరించినట్లు ప్రకటించింది మరియు/లేదా కోడ్ను దాని పద్ధతుల లోపల సమకాలీకరించబడిన బ్లాక్లలో చుట్టి ఉంటుంది."
"కాబట్టి నేను బహుళ థ్రెడ్ల నుండి ఉపయోగించగల ఏదైనా వస్తువు, మరియు ఇది ప్రోగ్రామ్లోని దాదాపు అన్ని వస్తువులు, నేను థ్రెడ్-సురక్షితంగా ఉండాలా?"
"సాధారణంగా, అవును. వాస్తవానికి, ప్రోగ్రామ్లోని అన్ని వస్తువులు వేర్వేరు థ్రెడ్ల ద్వారా ఉపయోగించబడవు, కానీ సాధారణంగా చాలా ఉన్నాయి. కాబట్టి, మీరు థ్రెడ్ కోసం కోడ్ రాయడం ప్రారంభించి, దాని నుండి వివిధ వస్తువులను యాక్సెస్ చేసినప్పుడు, ఆపై ప్రతి పద్ధతి కాల్తో "ఈ కాల్ సురక్షితమేనా?" అని మిమ్మల్ని మీరు ప్రశ్నించుకోవాలి.
"భద్రమా?"
"థ్రెడ్-సేఫ్, అంటే దీనిని బహుళ థ్రెడ్ల నుండి సురక్షితంగా పిలవవచ్చు."
"ఇక్కడ కొన్ని ఉదాహరణలు ఉన్నాయి. మీరు వివిధ థ్రెడ్ల నుండి యాక్సెస్ చేయబడిన స్ట్రింగ్ ఆబ్జెక్ట్ని కలిగి ఉన్నారని అనుకుందాం. మీరు ఇప్పటికే గుర్తుంచుకోవాలని భావించినట్లుగా, స్ట్రింగ్ అనేది అన్ని ఇతర ఆదిమ రకాలు వలె మార్పులేనిది . దీనర్థం వస్తువు సృష్టించబడిన తర్వాత మారదు. . దీని అర్థం అటువంటి వస్తువును "విచ్ఛిన్నం" చేయడం అసాధ్యం. అన్ని మార్పులేని వస్తువులు థ్రెడ్-సురక్షితమైనవి."
"సరే, అది విషయాలు సులభతరం చేస్తుంది."
"ఇప్పుడు, మీకు మార్చగల స్ట్రింగ్ అవసరమని అనుకుందాం."
"అవును, నాకు గుర్తుంది. రెండు రకాల స్ట్రింగ్లు ఉన్నాయి: స్ట్రింగ్బఫర్ మరియు స్ట్రింగ్బిల్డర్. స్ట్రింగ్బఫర్ స్ట్రింగ్బిల్డర్ లాగా ఉంటుంది, కానీ దాని పద్ధతులన్నీ సింక్రొనైజ్ చేయబడ్డాయి. ఇది కూడా థ్రెడ్-సురక్షితమేనా?"
"అవును. మీరు బహుళ థ్రెడ్ల నుండి స్ట్రింగ్బిల్డర్ ఆబ్జెక్ట్ను యాక్సెస్ చేయవలసి వస్తే, మీరు దానిని స్ట్రింగ్బఫర్తో భర్తీ చేయాలి. లేకుంటే, ముందుగానే లేదా తర్వాత థ్రెడ్లు అదే సమయంలో దాన్ని మారుస్తాయి మరియు దానిని «బ్రేక్» చేస్తాయి."
"వివిధ థ్రెడ్ల నుండి యాక్సెస్ చేయబడే వస్తువు నా స్వంత తరగతికి చెందిన వస్తువు అయితే? నేను ఈ సందర్భంలో కూడా దాని పద్ధతులకు సమకాలీకరించబడిన వాటిని జోడించాలా?"
"అవును. ఈ నియమాన్ని అనుసరించడం ఉత్తమం: వివిధ థ్రెడ్ల నుండి యాక్సెస్ చేయబడే అన్ని వస్తువులు తప్పనిసరిగా థ్రెడ్-సురక్షితంగా ఉండాలి."
"నేను చూస్తున్నాను. ప్రతిదీ చాలా తీవ్రంగా ఉందని నేను అనుకోలేదు. ధన్యవాదాలు, ఎల్లీ."
"మీకు స్వాగతం. డియెగో తన సులభమైన పనుల్లో కొన్నింటిని మీకు అందించినప్పుడు ఈ చిట్కాలు మీకు సహాయపడతాయని నేను ఆశిస్తున్నాను. ☺"
GO TO FULL VERSION