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
6
A
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);
}
bu http://stackoverflow.com/questions/2053679/how-do-i-recover-a-semaphore-when-the-process-that-decremented-it-to-zero- tarafından cevap mı –
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
Eh: http://charette.no-ip.com:81/programming/2010-01-13_PosixSemaphores/ - ayrıca dosya kilitleme çözümünü kullanıyor. –