ஜாவாவில் செமாஃபோர் மற்றும் அதன் பயன்பாடு என்ன?



செயல்முறைகளின் ஒத்திசைவுக்கு ஒரு செமாஃபோர் பயன்படுத்தப்படுகிறது. இந்த வலைப்பதிவு பல்வேறு வகையான மற்றும் ஜாவாவில் செமாஃபோர்களை செயல்படுத்துவதன் மூலம் உங்களை அழைத்துச் செல்லும்.

ஒரு செமாஃபோர் ஒரு கவுண்டர் மூலம் பகிரப்பட்ட வளத்திற்கான அணுகலைக் கட்டுப்படுத்துகிறது. அது ஒரு நூல் ஒத்திசைவு தவறவிட்ட சமிக்ஞைகளைத் தவிர்க்க அல்லது முக்கியமான பகுதியைக் காக்க நூல்களுக்கு இடையில் சமிக்ஞைகளை அனுப்ப பயன்படுகிறது. ஜாவாவில் உள்ள செமாஃபோர்ஸில் உள்ள இந்த வலைப்பதிவில், கருத்தை விரிவாக புரிந்துகொள்வோம்.
பின்வரும் வலைப்பதிவுகள் இந்த வலைப்பதிவில் விவரிக்கப்படும்:

ஜாவாவில் செமாஃபோர் என்றால் என்ன?

ஒரு செமாஃபோர் என்பது செயல்முறைகளின் ஒத்திசைவுக்குப் பயன்படுத்தப்படும் ஒரு மாறி, இது ஒரே நேரத்தில் செயல்முறைகளை நிர்வகிக்கப் பயன்படுகிறது. பல ஒரே நேரத்தில் செயல்முறைகள் மூலம் பொதுவான வளத்திற்கான அணுகலைக் கட்டுப்படுத்தவும், பந்தய நிலையைத் தவிர்க்கவும் இது பயன்படுத்தப்படுகிறது.





செமாஃபோரின் வகைகள் -

  • பைனரி செமாஃபோர்: ஒரு பைனரி செமாஃபோர் 0 மற்றும் 1 ஐ மட்டுமே மதிப்புகளாக எடுத்துக்கொள்கிறது மற்றும் பரஸ்பர விலக்கலை செயல்படுத்தவும் ஒரே நேரத்தில் செயல்முறைகளை ஒத்திசைக்கவும் பயன்படுத்தப்படுகிறது.

    ஜாவா என்ன ஒரு டோக்கன்
  • செமாஃபோர் எண்ணும்: எந்த நேரத்திலும் எண்ணும் செமாஃபோரின் மதிப்பு, அதே நேரத்தில் முக்கியமான பிரிவில் நுழையக்கூடிய அதிகபட்ச செயல்முறைகளின் எண்ணிக்கையைக் குறிக்கிறது.



செமாஃபோரின் வேலை

  • செமாஃபோர் எண்ணிக்கை> 0 எனில், நூல் ஒரு அனுமதியைப் பெறுகிறது, இது செமாஃபோரின் எண்ணிக்கையைக் குறைக்கிறது.

    மலைப்பாம்பில் சரங்களை எவ்வாறு மாற்றுவது
  • வேறு, தி அனுமதி பெறும் வரை தடுக்கப்படும்.

  • பகிர்வு வளத்திற்கு நூல் இனி அணுகல் தேவைப்படாதபோது, ​​அது அனுமதியை வெளியிடுகிறது, இது செமாஃபோர் எண்ணிக்கையை அதிகரிக்கும்.



  • மற்றொரு நூல் அனுமதிக்காகக் காத்திருந்தால், அந்த நூல் அந்த நேரத்தில் அனுமதி பெறும்.

செமாஃபோர் செயல்படுத்தல்

java.util.concurrent ஐ இறக்குமதி செய்க. sem = sem this.threadName = threadName public public பொது வெற்றிடத்தை இயக்கவும் () {// X ஆல் இயக்கவும் (this.getName (). சமம் ('X')) {System.out.println ('தொடர்கிறது' + நூல் பெயர்) முயற்சிக்கவும் {// பகிரப்பட்ட வளத்தை அணுக அனுமதி கிடைக்கும். System.out.println (threadName + 'அனுமதிக்காக காத்திருக்கிறது.') // பூட்டைப் பெறுதல் sem.acquire () System.out.println (threadName + 'க்கு அனுமதி கிடைக்கும் . ') // இப்போது, ​​பகிரப்பட்ட வளத்தையும் மீதமுள்ளவற்றையும் அணுகுவது காத்திருக்கும் (int i = 0 i<7 i++) { Resource.count++ System.out.println(threadName + ': ' + Resouce.count) // Now thread Y will try to execute Thread.sleep(20) } } catch (InterruptedException exc) { System.out.println(exc) } // Release the permit. System.out.println(threadName + ' releases the permit.') sem.release() } // run by thread Y else { System.out.println('Starting ' + threadName) try { // First, Y will try to get permit System.out.println(threadName + ' waiting for a permit.') // acquiring the lock sem.acquire() System.out.println(threadName + ' gets a permit.') // Now, accessing the shared resource and others will wait for(int i=0 i < 7 i++) { Resource.count-- System.out.println(threadName + ': ' + Resource.count) // Now, allowing a context switch -- if possible. // for thread X to execute Thread.sleep(20) } } catch (InterruptedException exc) { System.out.println(exc) } // Release the permit. System.out.println(threadName + ' releases the permit.') sem.release() } } } public class SemTest { public static void main(String args[]) throws InterruptedException { // creating a Semaphore object // with number of permits 1 Semaphore sem = new Semaphore(1) // creating two threads with name X and Y // Here thread X will increment and Y will decrement the counter MyDemo md1 = new MyDemo(sem, 'X') MyDemo md2 = new MyDemo(sem, 'Y') // stating threads X and Y md1.start() md2.start() // waiting for threads X and Y md1.join() mtd.join() System.out.println('count: ' + Resource.count) } } 

வெளியீடு-
எக்ஸ் தொடங்குகிறது
Y ஐத் தொடங்குகிறது
எக்ஸ் அனுமதிக்காக காத்திருக்கிறது
Y அனுமதிக்காக காத்திருக்கிறது
எக்ஸ்: 1
எக்ஸ்: 2
எக்ஸ்: 3
எக்ஸ்: 4
எக்ஸ்: 5
எக்ஸ்: 6
எக்ஸ்: 7
எக்ஸ் அனுமதி வெளியிடுகிறது
ஒய் அனுமதி பெறுகிறது
ஒய்: 6
ஒய்: 5
ஒய்: 4
ஒய்: 3
ஒய்: 2
ஒய்: 1
ஒய்: 0
மற்றும் வெளியீடுகள் அனுமதி
எண்ணிக்கை: 0

பைத்தானில் பைனரிக்கு மாற்றவும்

இதன் மூலம், “ஜாவாவில் உள்ள செமாஃபோர்ஸ்” இல் இந்த வலைப்பதிவின் முடிவுக்கு வருகிறோம். ஜாவா பற்றி மேலும் அறிய நீங்கள் விரும்பினால், பாருங்கள் உலகெங்கிலும் பரவியுள்ள 250,000 க்கும் மேற்பட்ட திருப்தியான கற்றவர்களின் வலைப்பின்னலுடன் நம்பகமான ஆன்லைன் கற்றல் நிறுவனமான எடுரேகாவால். ஜுவா டெவலப்பராக விரும்பும் மாணவர்கள் மற்றும் நிபுணர்களுக்காக எடுரேகாவின் ஜாவா ஜே 2 இஇ மற்றும் எஸ்ஓஏ பயிற்சி மற்றும் சான்றிதழ் பாடநெறி வடிவமைக்கப்பட்டுள்ளது. ஜாவா புரோகிராமிங்கில் உங்களுக்கு ஒரு தொடக்கத்தைத் தருவதற்கும், ஹைபர்னேட் & ஸ்பிரிங் போன்ற பல்வேறு ஜாவா கட்டமைப்புகளுடன் கோர் மற்றும் மேம்பட்ட ஜாவா கருத்தாக்கங்களுக்கும் பயிற்சி அளிப்பதற்காக இந்த பாடநெறி வடிவமைக்கப்பட்டுள்ளது.

எங்களுக்கு ஒரு கேள்வி கிடைத்ததா? இந்த “ஜாவாவில் செமாஃபோர் என்றால் என்ன” வலைப்பதிவின் கருத்துகள் பிரிவில் இதைக் குறிப்பிடவும், விரைவில் நாங்கள் உங்களிடம் வருவோம்.