Если безымянный семафор инициализируется в общей памяти, Shm_unlink () уничтожает семафор? -- c поле с участием posix поле с участием semaphore поле с участием shared-memory пол Связанный проблема

if an unnamed semaphore is initialized in shared memory, does shm_unlink() destroy the semaphore?


0
vote

проблема

русский

Я использую POSIX SEMAPHORES и совместную память для координации одного производителя и одного потребительского буфера. Я хочу полностью инициализировать эту общую память и семафор, независимо от того, используются или нет общая память имена или используется. Это функция, которую я хочу использовать:

 <Код> /* shared data */ typedef struct {     sem_t sem;     size_t head;     size_t tail; } shared_struct;  shared_struct * create_shmem_struct(const char *name) {      /* re-open shared memory */     shm_unlink(name);     int fd = shm_open (name, (O_CREAT | O_RDWR), (S_IRUSR | S_IWUSR));     ftruncate (fd, sizeof(shared_struct));     shared_struct *ptr = (shared_struct *) mmap (NULL, sizeof(shared_struct), PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);     close (fd);      /* initialize semaphore */     /* can i do this here? : sem_destroy(&ptr->sem); */     sem_init(&ptr->sem, 1, 1);      return ptr; }   

Что происходит с семафором, если он уже инициализируется, но нет <код> sem_destroy вызывается ранее <код> shm_unlink ? Более ли звонить <код> sem_destroy на возможном неизинициализированном безымянном семафоре до <код> sem_init ?

Я должен отметить, я основываю эту стратегию на слайдах Майкла Керриска от мужчин-страниц найдено здесь .

Английский оригинал

I'm using POSIX semaphores and shared memory to coordinate a single producer and single consumer buffer. I want to completely initialize this shared memory and semaphore, whether or not the shared memory is named or is being used. This is the function I want to use:

/* shared data */ typedef struct {     sem_t sem;     size_t head;     size_t tail; } shared_struct;  shared_struct * create_shmem_struct(const char *name) {      /* re-open shared memory */     shm_unlink(name);     int fd = shm_open (name, (O_CREAT | O_RDWR), (S_IRUSR | S_IWUSR));     ftruncate (fd, sizeof(shared_struct));     shared_struct *ptr = (shared_struct *) mmap (NULL, sizeof(shared_struct), PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);     close (fd);      /* initialize semaphore */     /* can i do this here? : sem_destroy(&ptr->sem); */     sem_init(&ptr->sem, 1, 1);      return ptr; } 

What happens to the semaphore if it already is initialized but no sem_destroy is called before shm_unlink? Does it hurt to call sem_destroy on a possibly uninitialized unnamed semaphore before sem_init?

I should note, I'm basing this strategy on Michael Kerrisk's slides from the man pages found here.

</div
           
 
 

Список ответов

Связанный проблема

0  Как я могу хранить разные виды операторов в 2D-массиве в C?  ( How can i store different kinds of operators in a 2d array in c ) 
Я хочу сделать функцию y = f (x) в виде строки и выяснить операторы в нем, чтобы хранить их в 2D-массиве, где каждый операторы будут рассматриваться как разде...

0  Как остановить программу хранения более одного символа в переменную CHAR? [Дубликат]  ( How to stop a program from storing more than a single character into a char vari ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> Этот вопрос уже есть ответы здесь : ...

4  Преобразовать фильм в Openni * .oni видео  ( Convert movie to openni oni video ) 
the библиотека Kinect Openni использует пользовательский формат видеофайла для хранения видеороликов, которые содержат информацию RGB + D. Эти видео имеют р...

1  Lnk2001: неразрешенный внешний символ _maincrtstartup  ( Lnk2001 unresolved external symbol maincrtstartup ) 
Я пытаюсь скомпилировать пример Win32 Parrot Ardrone SDK V1.8, используя Visual Studio 2012 Express для Windows Desktop. Я использую Windows 7 64-бит. SDK нап...

0  Напишите программу, которая извлекает содержимое файла RPM в Windows  ( Write a program that extracts the contents of an rpm file on windows ) 
Я хочу написать программу, которая извлечет содержимое RPM-файла и выполняет некоторые проверки проверки. Я буду использовать Qt для интерфейса, чтобы програм...

8  Нужно ли набрать CAST MALLOC и CALOOC [Дубликат]  ( Is it necessary to type cast malloc and calloc ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> Этот вопрос уже есть ответы здесь : ...

0  Не может запустить TCP-сервер на iOS, сотовой  ( Cannot run tcp server on ios cellular ) 
Я пытаюсь запустить TCP-сервер на iOS из сотовой связи. В целях задачи этого вопроса я написал эту очень упрощенную версию сервера и клиента в C, используя So...

1  Проблемы с проверкой программы. Пожалуйста помоги!  ( Issues with program validation please help ) 
// Ребята у меня есть проблемы с моим кодом и разрывая мои волосы, пытаясь решить это. Вопрос в том, что я пытаюсь подтвердить свой код, поэтому он не рассчит...

2  Состояние не удалось для ldrloaddll  ( Status failed for ldrloaddll ) 
Я пытаюсь разрабатывать функцию ldrloaddll и мне не повезло с этим .. Я также проушинул для некоторых примеров, нет никакой много документации или правильного...

4  Должны быть использованы кронштейны для одной строки условных утверждений? [закрыто]  ( Shall brackets be used for one line conditional statements ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> <Путь d = "M15 6.38A6.48 6.48 0 007.78. 04H-.02A6.49 6.49 0 002.05 ...

0  Реализация ARP Smooth  ( Implementing arp sweep ) 
Я играю с libpcap / jpcap. Реализация Sweeper ARP. Я отправляю запрос на все IP в блоке до вещательного адреса и чтения ответов. Теперь я не могу думать о том...

0  Fead вызывает ошибку сегментации  ( Fread causing segmentation fault ) 
Попытка создать файл 1024 байтов случайных данных. Когда я запускаю это, я получаю ошибку неисправности сегментации на линии FREAD. Кто-нибудь видит, что я де...

7  Как портировать родной C-код на Android  ( How to port native c code on android ) 
Кто-нибудь может сказать мне, как портировать нативную программу C на платформе Android ..умел ли я включить некоторые библиотеки C или как именно ...? Спас...

0  Где хранятся переменные указателя и как компилятор доступа к нормальной переменной? [закрыто]  ( Where the pointer variables are stored and how compiler access normal variable ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> закрыт. Этот вопрос не соответствует Рекомендациям переполнения ...

0  Подсчет и сортировка в C  ( Counting and sorting in c ) 
Я заряжаюсь с обычной программой C, которая подсчитывает ряд входов и соответственно классифицирует их. У меня на самом деле нет ни одного кода, написанного д...

Связанный проблема

0  Как я могу хранить разные виды операторов в 2D-массиве в C? 
0  Как остановить программу хранения более одного символа в переменную CHAR? [Дубликат] 
4  Преобразовать фильм в Openni * .oni видео 
1  Lnk2001: неразрешенный внешний символ _maincrtstartup 
0  Напишите программу, которая извлекает содержимое файла RPM в Windows 
8  Нужно ли набрать CAST MALLOC и CALOOC [Дубликат] 
0  Не может запустить TCP-сервер на iOS, сотовой 
1  Проблемы с проверкой программы. Пожалуйста помоги! 
2  Состояние не удалось для ldrloaddll 
4  Должны быть использованы кронштейны для одной строки условных утверждений? [закрыто] 
0  Реализация ARP Smooth 
0  Fead вызывает ошибку сегментации 
7  Как портировать родной C-код на Android 
0  Где хранятся переменные указателя и как компилятор доступа к нормальной переменной? [закрыто] 
0  Подсчет и сортировка в C