சி நிரலாக்கத்துடன் POSIX Semaphores

Posix Semaphores With C Programming



POSIX என்பது OS இன் சிறிய இடைமுகத்தைக் குறிக்கிறது, இது ஒரு IEEE தரநிலையாகும், இது பல்வேறு பயன்பாடுகளின் பெயர்வுத்திறனுக்கு உதவ உருவாக்கப்பட்டது. POSIX என்பது விற்பனையாளர்களின் ஒத்துழைப்பு மூலம் UNIX இன் பொதுவான தரப்படுத்தப்பட்ட பதிப்பை உருவாக்கும் முயற்சியாகும். பயன்பாடுகள் பயனுள்ளதாக இருந்தால் வன்பொருள் தளங்களில் போர்ட்டிங்கை எளிதாக்கும். ஹெவ்லெட்-பேக்கார்ட் POSIX ஐ அதன் உரிமம் பெற்ற MPE/iX OS பதிப்பு 5.0 மற்றும் HP/UXX பதிப்பு 10.0 உடன் முறையே ஒருங்கிணைக்கிறது (அதன் யுனிக்ஸ்).

POSIX தரநிலை பத்துக்கும் மேற்பட்ட பகுதிகளைக் கொண்டுள்ளது, இருப்பினும், இரண்டு எளிதில் கிடைக்கும். POSIX.1 கோப்புகள், நடைமுறைகள் மற்றும் I/O முனையங்களுக்கான C நிரலாக்க இடைமுகங்களை (அதாவது, கணினி அழைப்பு நூலகம்) விவரிக்கிறது. POSIX தளங்களுக்கான C POSIX தொகுப்பு நூலகம் C தர நூலகத்தின் கட்டமைப்பாகும். இது நிலையான ANSI C. யின் அதே நேரத்தில் நிறுவப்பட்டது. POSIX ஐ தரநிலை C உடன் இணக்கமாக்க, பல முயற்சிகள் மேற்கொள்ளப்பட்டுள்ளன. POSIX தரநிலை C இல் செயல்படுத்தப்பட்ட கூடுதல் அம்சங்களை வழங்குகிறது.







POSIX Semaphores

செமாஃபோர் என்பது ஒரு தரவு கட்டமைப்பாகும், இது செயல்முறைகளை ஒத்திசைப்பதற்கும் நூல்கள் ஒன்றோடொன்று தொடர்பு கொள்ளாமல் ஒன்றாகச் செயல்பட உதவுவதற்கும் பெரும்பாலும் பயன்படுத்தப்படுகிறது. செமாஃபோர்களுக்கான இடைமுகம் POSIX தரத்தால் குறிப்பிடப்பட்டுள்ளது. இது Pthreads இன் ஒரு பகுதி அல்ல. இருப்பினும், Pthreads ஐ ஆதரிக்கும் பெரும்பாலான UNIX கள் செமாஃபோர்களைக் கூட வழங்குகின்றன. லினக்ஸ் போன்ற யூனிக்ஸ் போன்ற கட்டமைப்புகளில், செமாஃபோர்கள் செய்தி வரிசைகள் மற்றும் இண்டர்பிராசஸ் கம்யூனிகேஷன் (ஐபிசி) சேவைகளின் கீழ் பொதுவான நினைவகத்துடன் இணைக்கப்படுகின்றன. பழைய கட்டமைப்பு வி semaphores மற்றும் நவீன POSIX semaphores இரண்டு வகையான semaphores ஆக. சிஸ்டம் வி செமாஃபோர் அழைப்புகளை விட POSIX Semaphore அழைப்பு மிகவும் எளிதானது. சிஸ்டம் வி செமாஃபோர்களைப் பெறுவது எளிது, குறிப்பாக முந்தைய யூனிக்ஸ் போன்ற தளங்களில். POSIX semaphores ஐப் பயன்படுத்தி நிரல்களை Pthread நூலகத்துடன் இணைக்க வேண்டிய அவசியம் உள்ளது. இந்த கட்டுரையில் POSIX semaphores ஐப் பார்ப்போம்.



ஏன் POSIX Semaphores?

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



செமாஃபோர்கள் 2 வகைகளில் கிடைக்கின்றன:





பைனரி செமாஃபோர் :

இது ஒரு மியூட்டெக்ஸ் பூட்டாகவும் அங்கீகரிக்கப்பட்டுள்ளது. இது 0 மற்றும் 1. ஆகிய இரண்டு சாத்தியமான மதிப்புகளை மட்டுமே கொண்டிருக்கும். மதிப்பு 1 என துவக்கப்படும். இது தீவிர பிரிவு சிக்கலை தீர்க்க பல செயல்முறைகளை அமல்படுத்த பயன்படுகிறது.



செமாஃபோரை எண்ணுதல் :

அதன் அளவு ஒரு கட்டுப்பாடற்ற களத்தில் மாறுபடும். எண்ணற்ற நிகழ் ஆதாரங்களை அணுகுவதற்கான அதிகாரம் பெற இது பயன்படுத்தப்படுகிறது.

லினக்ஸ் POSIX கட்டமைப்பானது அதன் ஒருங்கிணைந்த Semaphore களஞ்சியத்தைக் கொண்டுள்ளது. அதைப் பயன்படுத்த, நாம் கண்டிப்பாக:

  • Semaphore.h ஐச் சேர்க்கவும்
  • -Lpthread -lrt உடன் இணைப்பதன் மூலம் குறியீட்டை குவியுங்கள்.

கிட்டத்தட்ட அனைத்து POSIX Semaphore முறைகள் மற்றும் படிவங்கள் முன்மாதிரி அல்லது 'Semaphore.h' இல் குறிப்பிடப்பட்டுள்ளன. ஒரு நிறுவனம் அல்லது பொருளை விவரிக்க செமாஃபோரைப் பயன்படுத்துவோம்:

>>sem_t sem_name;

POSIX Semaphore இல் நாம் பயன்படுத்தும் பல்வேறு செயல்பாடுகள் இங்கே.

Sem_init

செமாஃபோரைத் தொடங்க, நீங்கள் sem_init முறையைப் பயன்படுத்த வேண்டும். இந்த செயல்பாட்டில், sem ஆரம்பிக்கப்பட்ட semaphore பொருளுக்கு ஒத்திருக்கிறது. Pshared என்பது ஒரு பேனர் அல்லது கொடி ஆகும், இது செமாஃபோரை ஒரு முட்கரண்டி () செயல்முறையுடன் பகிர முடியுமா இல்லையா என்பதைக் குறிப்பிடுகிறது. பகிரப்பட்ட செமாஃபோர்கள் தற்போது லினக்ஸ் த்ரெட்களால் இணைக்கப்படவில்லை. வாதம் மதிப்பு என்பது ஆரம்ப மதிப்பாகும்.

>> intsem_init(sem_t*sem, intபகிரப்பட்டது, கையொப்பமிடாத intமதிப்பு);

செம்_வைட்

செமாஃபோரைப் பிடிக்க/பூட்ட அல்லது காத்திருக்க வைக்க நாங்கள் செம்-வெயிட் முறையைப் பயன்படுத்துவோம். செமாஃபோருக்கு எதிர்மறை மதிப்பு வழங்கப்பட்டிருந்தால், அழைப்பு சுழற்சி தானாகவே தடுக்கப்படும். வேறு எந்த நூலும் sem_post ஐ அழைக்கும் போதெல்லாம், ஏற்கனவே அடைபட்ட செயல்முறைகளில் ஒன்று விழித்துக்கொள்ளும்.

>> intsem_wait(sem_t*sem);

Sem_post

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

>> intsem_post(sem_t*sem);

Sem_getvalue

செமாஃபோரின் மதிப்பு பற்றி நீங்கள் தெரிந்து கொள்ள விரும்பினால், கீழே உள்ள sem_getvalue செயல்பாட்டைப் பயன்படுத்த வேண்டும். இது செமாஃபோரின் தற்போதைய மதிப்பைப் பெற்று, வால்ப்-பாயிண்டட் இடத்தில் வைக்கப்படும்.

>>Int sem_getvalue(sem_t*sem, int *நாய்க்குட்டி);

Sem_dstroy

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

>>Int sem_dstroy(sem_t*sem);

GCC பயன்பாட்டை நிறுவவும்

POSIX Semaphore C குறியீட்டை தொகுக்க, உங்கள் லினக்ஸ் கணினியில் gcc பயன்பாடு நிறுவப்பட்டிருக்க வேண்டும். இந்த நோக்கத்திற்காக, உங்கள் கட்டளை முனையத்தைத் திறந்து கீழே உள்ள கட்டளையை முயற்சிக்கவும்.

$சூடோ apt-get install gcc

அடிப்பதன் மூலம் உங்கள் செயலை உறுதிப்படுத்தவும் மற்றும் .

உபுண்டுவில் சி நிரலாக்கத்துடன் POSIX Semaphore ஐ செயல்படுத்துதல்

தொடக்கத்தில், உபுண்டு 20.04 கணினியில் .cpp நீட்டிப்புடன் ஒரு புதிய கோப்பை உருவாக்க வேண்டும். இதற்காக, நீங்கள் உங்கள் வீட்டு அடைவை நோக்கி செல்ல வேண்டும் மற்றும் new.cpp என்ற புதிய வெற்று கோப்பை உருவாக்க வேண்டும். உங்கள் கட்டளை முனையத்தில் உள்ள தொடு கட்டளையைப் பயன்படுத்தி அதை உருவாக்கலாம்.

முகப்பு கோப்பகத்தில் new.cpp கோப்பு உருவாக்கப்பட்டிருப்பதைக் காணலாம்.


.Cpp கோப்பை உருவாக்கிய பிறகு, அதை உங்கள் லினக்ஸ் கணினியில் ஒரு உரை திருத்தியாகத் திறந்து, கீழே உள்ள குறியீட்டை இந்தக் கோப்பில் அப்படியே எழுதவும். அதன் பிறகு, சேமித்து மூடவும்.

உபுண்டு 20.04 இல் POSIX Semaphore C நிரலை இயக்கவும்

உபுண்டு 20.04 இல் உங்கள் முனையத்தைத் திறந்து கீழே உள்ள gcc கட்டளையைத் தொடர்ந்து கோப்புப்பெயரை இயக்கவும்.

$gccfilename.c –lpthread –lrt

2 நூல்கள் உருவாகியுள்ளன, ஒன்று 2 வினாடிகளுக்குப் பிறகு உருவாகிறது. போல்ட்டைப் பெற்ற பிறகு, முதல் நூல் 4 விநாடிகள் தூங்குகிறது. எனவே, அது அழைக்கப்பட்ட பிறகு, இரண்டாவது நூல் நேரடியாக சேராது, மேலும் இது அழைக்கப்பட்ட 4-2 = 2 வினாடிகளுக்குப் பிறகு தோன்றும். வெளியீடு இதோ:

சூழல் மாறுதலின் படி, நாங்கள் செமாஃபோரைப் பயன்படுத்தவில்லை என்றால், முடிவு கவனித்தபடி இருக்கலாம்:

முடிவுரை

இந்த வழிகாட்டியில், உபுண்டு 20 இல் C நிரலாக்கத்துடன் POSIXSemaphore பயன்படுத்துவது பற்றிய விரிவான கண்ணோட்டம் கொடுக்கப்பட்டுள்ளது. சில சி குறியீடு முழுவதும் POSIX அல்லது Pthread நூலகத்தைப் பயன்படுத்துவதன் மூலம், POSIX Semaphore குறியீட்டின் போது இனம் நிலைமைகளைத் தடுக்க மிகவும் எளிதாகப் பயன்படுத்தலாம்.