2015-01-21 11 views
6

Birden çok işlem sistemli bir Linux sisteminde V semaforları, semaforun çökmesine neden olan bir işlem varsa, bir semaforun "sıkışıp kalmasını" önleyen SEM_UNDO seçeneğine izin verir. Semaforu tutan bir süreçte POSIX semaforlarının bir çökme sonucu sıkışmasını önlemek için doğru yöntem nedir? Veya POSIX garanti garanti eder semafor bir kaza durumunda serbest bırakılır?Posix semaforları için Sys V SEM_UNDO eşdeğeri

+1

bu http://stackoverflow.com/questions/2053679/how-do-i-recover-a-semaphore-when-the-process-that-decremented-it-to-zero- tarafından cevap mı –

+0

Evet ve hayır. POSIX semaforlarında bazı önemli kaynakların bir kaza sonucu belirsiz bir durumda bir şeyler bırakmasını umuyordum. Bu bağlantı kesinlikle böyle bir durumla başa çıkmanın bir yolunu sunuyor, ancak POSIX teknik özelliklerinden neyin gözüktüğünü açıklamaksızın. Sonunda SYS V semaforlarını kullandım, fakat POSIX'in neden bir çarpışmada muteksin tek mantıklı davranışı gibi göründüğünü bilmediğini merak ediyorum. – Joe

+1

Eh: http://charette.no-ip.com:81/programming/2010-01-13_PosixSemaphores/ - ayrıca dosya kilitleme çözümünü kullanıyor. –

cevap

-1

SIGSEGV için sinyal işleyicisini kullanabilir ve daha sonra sinyal işleyicinin kilidini açıp kaldırabilirsiniz.

// set handler 
signal(SIGSEGV, handler); 

void handler(int signum) { 
// unlock the locked semaphores 
signal(SIGSEGV, SIG_DFL); 
} 
+0

Ancak hangi iş parçacığının bir SEGV yakaladığının garantisi yoktur. Yani, kilidin sahibi olan iş parçasında olacağınıza dair bir garanti yoktur. – Joe

+0

Sanırım semaforlar sahiplik kavramına sahip değil, muteksler yapıyor. – Pointer