ÈÌß
creatsem - coçäaeò äâoè÷íûé ceìaôop
ÑÈÍÒÀÊÑÈÑ
int creatsem (sem_name, mode) char *sem_name; int mode;
ÎÏÈÑÀÍÈÅ
creatsem oïpeäeëÿeò äâoè÷íûé ceìaôop c èìeíeì sem_name;
paáoòa c ceìaôopoì áyäeò ocyùecòâëÿòücÿ ôyíêöèÿìè waitsem(3)
è sigsem(3) äëÿ ïoääepæêè ècêëþ÷èòeëüíoão äocòyïa ê
pecypcaì, paçäeëÿeìûì ïepeìeííûì èëè êpèòè÷ecêèì y÷acòêaì
ïpoãpaìì. creatsem âoçâpaùaeò yíèêaëüíûé íoìep ceìaôopa,
sem_num, êoòopûé çaòeì ècïoëüçyeòcÿ â oïepaöèÿx waitsem è
sigsem. Ceìaôopû c÷èòaþòcÿ cïeöèaëüíûìè ôaéëaìè c íyëeâoé
äëèíoé. Ïpocòpaícòâo, ïpeäíaçía÷eííoe äëÿ èìeíè ôaéëa,
ècïoëüçyeòcÿ äëÿ xpaíeíèÿ yíèêaëüíoão èäeíòèôèêaòopa
ceìaôopa. mode çaäaeò äocòyï ê ceìaôopy òaê æe, êaê ê
oáû÷íoìy ôaéëy. Äocòyï ê ceìaôopy paçpeøeí ía ocíoâaíèè áèòa
paçpeøeíèÿ ÷òeíèÿ; paçpeøeíèe çaïècè è âûïoëíeíèÿ
èãíopèpyeòcÿ.
C ceìaôopoì ìoæío paáoòaòü ïpèìèòèâaìè cèíxpoííoão xapaêòepa, òaêèìè êaê waitsem è sigsem. creatsem ycòaíaâëèâaeò ceìaôop â íeêoòopoe ía÷aëüíoe çía÷eíèe, opensem oòêpûâaeò ceìaôop äëÿ ècïoëüçoâaíèÿ eão ïpoöeccoì. Cèíxpoííocòü paáoòû c ceìaôopoì ãapaíòèpyeò íeäeëèìocòü (íeïpepûâaeìocòü) ceìaôopíûx oïepaöèé. Ýòè ïpèìèòèâû ècïoëüçyþòcÿ ïpèìeíèòeëüío ê ceìaôopaì, êoòopûe câÿçûâaþòcÿ c êaæäûì pecypcoì (âêëþ÷aÿ êpèòè÷ecêèe y÷acòêè ïpoãpaìì) äëÿ eão çaùèòû.
Ïpoöecc, yïpaâëÿþùèé ceìaôopoì, äoëæeí âûïoëíèòü:
sem_num = creatsem ("semaphore", mode);
äëÿ coçäaíèÿ, èíèöèaëèçaöèè è oòêpûòèÿ ceìaôopa ýòèì ïpoöeccoì. Bce äpyãèe ïpoöeccû, ècïoëüçyþùèe ceìaôop, äoëæíû âûïoëíèòü:
sem_num = opensem ("semaphore");
äëÿ ïoëy÷eíèÿ äocòyïa ê eão çía÷eíèþ. Çaìeòèì, ÷òo ïpoöecc íe ìoæeò oòêpûòü è ècïoëüçoâaòü ceìaôop, êoòopûé íe èíèöèaëèçèpoâaí âûçoâoì creatsem. Ïpoöecc íe ìoæeò oòêpûòü ceìaôop áoëee oäíoão paça â òe÷eíèe oäíoão ïepèoäa paáoòû. Kaê coçäaþùèé, òaê è oòêpûâaþùèé ïpoöeccû ècïoëüçyþò waitsem è sigsem äëÿ paáoòû c ceìaôopoì sem_num.
COÂÌECÒÈÌOCÒÜ
creatsem ìoæeò áûòü ècïoëüçoâaí äëÿ oïpeäeëeíèÿ ceìaôopoâ
XENIX, âepcèè 3, ío íe ceìaôopoâ XENIX System V.
ÑÌ. ÒÀÊÆÅ
opensem(3), waitsem(3), sigsem(3)
ÄÈÀÃÍÎÑÒÈÊÀ
creatsem âoçâpaùaeò çía÷eíèe -1 â cëy÷ae oáíapyæeíèÿ oøèáêè.
Ecëè ceìaôop c èìeíeì sem_num yæe oòêpûò äëÿ ècïoëüçoâaíèÿ
äpyãèìè ïpoöeccaìè, â errno çaíocèòcÿ êoä oøèáêè EEXIST.
Ecëè yêaçaííûé ôaéë cyùecòâyeò, ío íe èìeeò ceìaôopíoão
òèïa, â errno çaíocèòcÿ ENOTNAM. Ecëè ceìaôop íe áûë
èíèöèaëèçèpoâaí âûçoâoì creatsem, â errno çaíocèòcÿ ENAVAIL.
ÇAÌE×AÍÈß
Ïocëe âûçoâa creatsem íeoáxoäèìo âûçâaòü waitsem äëÿ
ïoëy÷eíèÿ yïpaâëeíèÿ âûápaííûì pecypcoì.
Ýòa ocoáeííocòü cïeöèôè÷ía äëÿ XENIX è ìoæeò oòcyòcòâoâaòü â äpyãèx peaëèçaöèÿx UNIX.
Ïpoãpaììû, ècïoëüçyþùèe ýòy ôyíêöèþ, äoëæíû êoìïoíoâaòücÿ c ôëaãoì -lx.