Używam semafora do synchronizowania niektórych części w mojej aplikacji.sem_release(): nie udało się zwolnić klucza 0xc: niepoprawny argument
Na zwalnianie semafora (sem_release) Jestem coraz to ostrzeżenie:
sem_release(): nie można zwolnić klawisz 0xC: Invalid argument
Po pierwsze nie wiem, czy semafor został wydany, ale ponieważ nie uzyskuję "prawdziwości" w wyniku, wydaje mi się, że nie jest on wypuszczany.
PHP Wersja: 06/05/30
ipcs -V => ipcs z util-Linux 2.25.2
Oto semafora:
key semid owner perms nsems
0x0000000c 4124122 myUser 666 3
Tutaj część kodu (klasa synchronizacji):
...
if (!($this->semaphoreId = sem_get($this->id, 1)))
throw new RuntimeException('Error getting Semaphore.');
...
if (!sem_acquire($this->semaphoreId))
throw new RuntimeException('Error acquiring Semaphore.');
...
if (!sem_release($this->semaphoreId))
throw new RuntimeException('Error releasing Semaphore.');
PS Otrzymuję ten błąd tylko w moim środowisku produktywnym i nie mogę odtworzyć/debugować w moim środowisku testowym.
Wyszukiwanie w Internecie dla tego komunikatu o błędzie, ale nic nie znalazłem.
Czy ktoś wie, co oznacza ta wiadomość?
Zmieniano:
- komunikat Błąd nie pojawia się za każdym razem, gdy skrypt jest uruchomiony.
- Rzeczywiście czasami pojawia się błąd "Błąd przy pozyskiwaniu semafora" z podobnym ostrzeżeniem "sem_acquire(): nie udało się uzyskać klucza 0xc: Identyfikator usunięty", ALE nie w tym samym czasie (dzień) Otrzymuję komunikat "Błąd zwalniający semafor"
- Powyższa klasa jest używana w różnych miejscach z różnymi kluczami do synchronizacji części kodu aplikacji. Nie mam żadnych problemów z innymi kluczami. I tak, ten klucz "12"/"0xc" jest używany TYLKO w jednym miejscu i od tego samego użytkownika.
- Problemy z pozwoleniem nie powinno wystąpić maksymalnie, bo jeśli sprawdzeniu permisson semafora „0xC” jest „666”
Edytowałem pytanie z częściami mojego kodu i informacjami, które w jakiś sposób odpowiadają na "pytania" – dritan
Czy to możliwe, że twój program tworzy zakleszczenia, a następnie nie jesteś w stanie ich zwolnić? –
Nie, nie sądzę, bo jeśli zdarzy się impas, to zobaczę zablokowane procesy na liście procesów. – dritan