23 ΠΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ sem_close, Ρ ΠΎΡΡ, Π΅ΡΠ»ΠΈ Π±Ρ ΠΌΡ Π½Π΅ ΡΠ΄Π΅Π»Π°Π»ΠΈ ΡΡΠΎΡ Π²ΡΠ·ΠΎΠ², ΡΠ΅ΠΌΠ°ΡΠΎΡ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ Π·Π°ΠΊΡΡΠ»ΡΡ Π±Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠΈ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΈ ΡΠ΅ΡΡΡΡΡ ΡΠΈΡΡΠ΅ΠΌΡ Π±ΡΠ»ΠΈ Π±Ρ Π²ΡΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½Ρ.
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° semunlink
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 10.4 ΡΠ΄Π°Π»ΡΠ΅Ρ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ΅ΠΌΠ°ΡΠΎΡ.
ΠΠΈΡΡΠΈΠ½Π³ 10.4. Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ°//pxsem/semunlink.c
1 #include "unpipc.h"
2 int
3 main(int argc, char **argv)
4 {
5 if (argc != 2)
6 err_quit("usage: semunlink <name>");
7 Sem_unlink(argv[1]);
8 exit(0);
9 }
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° semgetvalue
Π Π»ΠΈΡΡΠΈΠ½Π³Π΅ 10.5 ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΡΠ΅ΠΊΡΡ ΠΏΡΠΎΡΡΠ΅ΠΉΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΉ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ΅ΠΌΠ°ΡΠΎΡ, ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π΅Π³ΠΎ ΡΠ΅ΠΊΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈ Π²ΡΠ²ΠΎΠ΄ΠΈΡ Π΅Π³ΠΎ.
ΠΠΈΡΡΠΈΠ½Π³ 10.5. ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈ Π²ΡΠ²ΠΎΠ΄ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ°//pxsem/semgetvalue.Ρ
1 #include "unpipc.h"
2 int
3 main(int argc, char **argv)
4 {
5 sem_t *sem;
6 int val;
7 if (argc != 2)
8 err_quit("usage: semgetvalue <name>");
9 sem = Sem_open(argv[1], 0);
10 Sem_getvalue(sem, &val);
11 printf("value = %d\n", val);
12 exit(0);
13 }
ΠΡΠΊΡΡΡΠΈΠ΅ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ°9 Π‘Π΅ΠΌΠ°ΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΠΎΡΠΊΡΡΠ²Π°Π΅ΠΌ, Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π·Π°ΡΠ°Π½Π΅Π΅ ΡΠΎΠ·Π΄Π°Π½ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ. ΠΡΠΎΡΡΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ sem_open Π±ΡΠ΄Π΅Ρ 0: ΠΌΡ Π½Π΅ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ ΡΠ»Π°Π³ O_CREAT ΠΈ Π½Π°ΠΌ Π½Π΅ Π½ΡΠΆΠ½ΠΎ Π·Π°Π΄Π°Π²Π°ΡΡ Π½ΠΈΠΊΠ°ΠΊΠΈΡ Π΄ΡΡΠ³ΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΎΡΠΊΡΡΡΠΈΡ 0_Ρ Ρ Ρ .
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° semwait
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 10.6 ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ΅ΠΌΠ°ΡΠΎΡ, Π²ΡΠ·ΡΠ²Π°Π΅Ρ semwait (ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠ°, Π΅ΡΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ° ΠΌΠ΅Π½ΡΡΠ΅ Π»ΠΈΠ±ΠΎ ΡΠ°Π²Π½ΠΎ 0, Π° ΠΏΡΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠΈ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ° ΡΠΌΠ΅Π½ΡΡΠ°Π΅Ρ Π΅Π³ΠΎ Π½Π° 1), ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΠΈ Π²ΡΠ²ΠΎΠ΄ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ°, Π° Π·Π°ΡΠ΅ΠΌ ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΡΠ²ΠΎΡ ΡΠ°Π±ΠΎΡΡ Π½Π°Π²ΡΠ΅Π³Π΄Π° ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ pause.
ΠΠΈΡΡΠΈΠ½Π³ 10.6. ΠΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ° ΠΈ Π²ΡΠ²ΠΎΠ΄ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ//pxsem/semwait.c
1 #include "unpipc.h"
2 int
3 main(int argc, char **argv)
4 {
5 sem_t *sem;
6 int val;
7 if (argc != 2)
8 err_quit("usage: semwait <name>");
9 sem = Sem_open(argv[1], 0);
10 Sem_wait(sem);
11 Sem_getvalue(sem, &val);
12 printf("pid %ld has semaphore, value = %d\n", (long) getpid(), val);
13 pause(); /* Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΡΡΡ, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠ΄Π°Π»Π΅Π½ */
14 exit(0);
15 }
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° sempost
Π Π»ΠΈΡΡΠΈΠ½Π³Π΅ 10.7 ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ post Π΄Π»Ρ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ° (ΡΠΎ Π΅ΡΡΡ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅Ρ Π΅Π³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° 1), Π° Π·Π°ΡΠ΅ΠΌ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ° ΠΈ Π²ΡΠ²ΠΎΠ΄ΠΈΡ Π΅Π³ΠΎ.
ΠΠΈΡΡΠΈΠ½Π³ 10.7. Π£Π²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ°//pxsem/sempost.c
1 #include "unpipc.h"
2 int
3 main(int argc, char **argv)
4 {
5 sem_t *sem;
6 int val;
7 if (argc != 2)
8 err_quit("usage: sempost <name>");
9 sem = Sem_open(argv[1], 0);
10 Sem_post(sem);
11 Sem_getvalue(sem, &val);
12 printf("value = %d\n", val);
13 exit(0);
14 }
ΠΡΠΈΠΌΠ΅ΡΡ
ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° ΠΌΡ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ΅ΠΌΠ°ΡΠΎΡ Π² Digital Unix 4.0B ΠΈ Π²ΡΠ²Π΅Π΄Π΅ΠΌ Π΅Π³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌΠΎΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΏΡΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ:
alpha % semcreate /tmp/test1
alpha % ls-l /tmp/test1
-rw-r--r-- 1 rstevens system 264 Nov 13 08:51 /tmp/test1
alpha %semgetvalue /tmp/test1
value = 1
ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ ΠΎΡΠ΅ΡΠ΅Π΄ΡΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Posix ΡΠΈΡΡΠ΅ΠΌΠ° ΡΠΎΠ·Π΄Π°Π΅Ρ ΡΠ°ΠΉΠ» ΡΠ΅ΠΌΠ°ΡΠΎΡΠ° Ρ ΡΠ΅ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΌΡ ΡΠΊΠ°Π·Π°Π»ΠΈ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ.
Π’Π΅ΠΏΠ΅ΡΡ ΠΏΠΎΠ΄ΠΎΠΆΠ΄Π΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ° ΠΈ ΠΏΡΠ΅ΡΠ²Π΅ΠΌ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ²ΡΠ΅ΠΉ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ:
alpha % semwait /tmp/test1
pid 9702 has semaphore, value = 0 Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ° ΠΈΠ· sem_wait
^? ΠΊΠ»Π°Π²ΠΈΡΠ° ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ Π² Π½Π°ΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅
alpha % semgetvalue /tmp/test1
value = 0 Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΎΡΡΠ°Π΅ΡΡΡ Π½ΡΠ»Π΅Π²ΡΠΌ
ΠΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΠ»Π»ΡΡΡΡΠΈΡΡΠ΅Ρ ΡΠΏΠΎΠΌΡΠ½ΡΡΡΠ΅ ΡΠ°Π½Π΅Π΅ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ. ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ° ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ ΠΆΠΈΠ²ΡΡΠ΅ΡΡΡΡ ΡΠ΄ΡΠ°. ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ 1, ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ΅ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ°, Ρ ΡΠ°Π½ΠΈΡΡΡ Π² ΡΠ΄ΡΠ΅ Π΄Π°ΠΆΠ΅ ΡΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π½ΠΈ ΠΎΠ΄Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π΅ ΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΡΠΈΠΌ ΡΠ΅ΠΌΠ°ΡΠΎΡΠΎΠΌ. ΠΠΎ-Π²ΡΠΎΡΡΡ , ΠΏΡΠΈ Π²ΡΡ ΠΎΠ΄Π΅ ΠΈΠ· ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ semwait, Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π²ΡΠ΅ΠΉ ΡΠ΅ΠΌΠ°ΡΠΎΡ, Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΅Π³ΠΎ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΡΡΡ, ΡΠΎ Π΅ΡΡΡ ΡΠ΅ΡΡΡΡ ΠΎΡΡΠ°Π΅ΡΡΡ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ. ΠΡΠΎ ΠΎΡΠ»ΠΈΡΠ°Π΅Ρ ΡΠ΅ΠΌΠ°ΡΠΎΡΡ ΠΎΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ fcntl, ΠΎΠΏΠΈΡΠ°Π½Π½ΡΡ Π² Π³Π»Π°Π²Π΅ 9, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ½ΠΈΠΌΠ°Π»ΠΈΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠΈ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠΈ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠ°.
ΠΠΎΠΊΠ°ΠΆΠ΅ΠΌ ΡΠ΅ΠΏΠ΅ΡΡ, ΡΡΠΎ Π² ΡΡΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ², ΠΎΠΆΠΈΠ΄Π°ΡΡΠΈΡ ΡΠ°Π·Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ°:
alpha % semgetvalue /tmp/test1
value = 0 ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΎΡ ΡΠ°Π½ΠΈΠ»ΠΎΡΡ Ρ ΠΊΠΎΠ½ΡΠ° ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°
alpha % semwait /tmp/test1 & Π·Π°ΠΏΡΡΠΊ Π² ΡΠΎΠ½ΠΎΠ²ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅
[1] 9718 Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΡΡΡ Π² ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ°
alpha % semgetvalue /tmp/test1
value = β1 ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΎΡΠ΅ΡΡ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ°
alpha % semwait /tmp/test1 & Π·Π°ΠΏΡΡΠΊ Π΅ΡΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° Π² ΡΠΎΠ½ΠΎΠ²ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅
[2] 9727 ΠΎΠ½ ΡΠ°ΠΊΠΆΠ΅ Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΡΡΡ
alpha % semgetvalue /tmp/test1
value = β2 Π΄Π²Π° ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΎΠΆΠΈΠ΄Π°ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ°
alpha % sempost /tmp/test1
value = β1 Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΈΡΠΈΠ· sem_post
pid 9718 has semaphore, value = β1 Π²ΡΠ²ΠΎΠ΄ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ semwait
alpha % sempost /tmp/test1
value = 0
pid 9727 has semaphore, value = 0 Π²ΡΠ²ΠΎΠ΄ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ semwait
ΠΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΌ Π²ΡΠ·ΠΎΠ²Π΅ sem_post Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ° ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΎΡΡ Ρ β2 Π½Π° β1 ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ², ΠΎΠΆΠΈΠ΄Π°Π²ΡΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ°, Π±ΡΠ» ΡΠ°Π·Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½.
ΠΡΠΏΠΎΠ»Π½ΠΈΠΌ ΡΠ΅ ΠΆΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π² Solaris 2.6, ΠΎΠ±ΡΠ°ΡΠ°Ρ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠ°Π·Π»ΠΈΡΠΈΡ Π² ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ:
solaris % semcreate /test2
solaris % ls βl /tmp/.*test2*
-rw-r--r-- 1 rstevens other1 48 Nov 13 09:11 /tmp/.SEMDtest2
βrw-rw-rwβ 1 rstevens other1 0 Nov 13 09:11 /tmp/.SEMLtest2
solaris % semgetvalue /test2
value = 1
ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ ΠΎΡΠ΅ΡΠ΅Π΄ΡΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Posix ΡΠ°ΠΉΠ»Ρ ΡΠΎΠ·Π΄Π°ΡΡΡΡ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ /tmp, ΠΏΡΠΈΡΠ΅ΠΌ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌΠΎΠ΅ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΠΈΠΌΡ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΡΡΡΡΠΈΠΊΡΠΎΠΌ ΠΈΠΌΠ΅Π½ ΡΠ°ΠΉΠ»ΠΎΠ². Π Π°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΌ Π² Π²ΡΠ·ΠΎΠ²Π΅ sem_open, Π° Π²ΡΠΎΡΠΎΠΉ ΡΠ°ΠΉΠ», ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π΄ΠΎΡΡΡΠΏΠ°.
ΠΡΠΎΠ²Π΅ΡΠΈΠΌ, ΡΡΠΎ ΡΠ΄ΡΠΎ Π½Π΅ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ° ΠΏΡΠΈ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠΈ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠ°, ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ²ΡΠ΅Π³ΠΎ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ:
solaris % semwait /test2
pid 4133 has semaphore, value = 0
^? Π½Π°ΠΆΠΈΠΌΠ°Π΅ΠΌ ΠΊΠ»Π°Π²ΠΈΡΡ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ
solaris % semgetvalue /test2
value = 0
ΠΠΎΡΠΌΠΎΡΡΠΈΠΌ ΡΠ΅ΠΏΠ΅ΡΡ, ΠΊΠ°ΠΊ ΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ° Π² ΡΡΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠΈ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΠΈ Π½ΠΎΠ²ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ², ΠΎΠΆΠΈΠ΄Π°ΡΡΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ°:
solaris % semgetvalue /test2
value = 0 Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΎΡ ΡΠ°Π½ΠΈΠ»ΠΎΡΡ Ρ ΠΊΠΎΠ½ΡΠ° ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°
solaris % semwait /test2& Π·Π°ΠΏΡΡΠΊ Π² ΡΠΎΠ½ΠΎΠ²ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅
[1] 4257 ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΡΡΡ
solaris % semgetvalue /test2
value = 0 Π² ΡΡΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ
solaris % semwait /test2& Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΡΠΎΠ½ΠΎΠ²ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ
[2] 4263
solaris % semgetvalue /test2
value 0 ΠΈ Π΄Π»Ρ Π΄Π²ΡΡ ΠΎΠΆΠΈΠ΄Π°ΡΡΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΎΡΡΠ°Π΅ΡΡΡ Π½ΡΠ»Π΅Π²ΡΠΌ
solaris % sempost /test2 Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ post
pid 4257 has semaphore, value = 0 Π²ΡΠ²ΠΎΠ΄ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ semwait
value = 0
solaris % sempost /test2
pid 4263 has semaphore, value = 0 Π²ΡΠ²ΠΎΠ΄ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ semwait
value = 0
ΠΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅ΡΠΈΡΡ ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°ΠΌΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠΎΠΉ ΠΆΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ Π² Digital Unix 4.0B: ΠΏΠΎΡΠ»Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΡΠ°Π·Ρ ΠΆΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΠΎΠΆΠΈΠ΄Π°ΡΡΠ΅ΠΌΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ° ΠΏΡΠΎΡΠ΅ΡΡΡ.
10.6. ΠΠ°Π΄Π°ΡΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π΅ΠΉ ΠΈ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Π΅ΠΉ
Π ΡΠ°Π·Π΄Π΅Π»Π΅ 7.3 ΠΌΡ ΠΎΠΏΠΈΡΠ°Π»ΠΈ ΡΡΡΡ Π·Π°Π΄Π°ΡΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π΅ΠΉ ΠΈ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Π΅ΠΉ ΠΈ ΠΏΡΠΈΠ²Π΅Π»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ Π΅Π΅ ΡΠ΅ΡΠ΅Π½ΠΈΠΉ, Π² ΠΊΠΎΡΠΎΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ²-ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π΅ΠΉ Π·Π°ΠΏΠΎΠ»Π½ΡΠ»ΠΈ ΠΌΠ°ΡΡΠΈΠ², ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π»ΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠΌ-ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Π΅ΠΌ.