Přerušení write při startu vlákna

Jiri Kosina jikos na jikos.cz
Středa Březen 14 15:30:06 CET 2007


On Tue, 13 Mar 2007, Ladislav Vaiz wrote:

> mám multithreadovou aplikaci psanou v C, používám thready z glib. 
> Pracovní thready jsou vždy vytvářeny z hlavního threadu a provádí co 
> nejjednodušší činnost. Jeden thread zapisuje do /dev/dsp funkcí write. 
> Stává se, že se funkce write ukončí aniž by zapsala požadovaný počet 
> bytů. Vrátí obecně různé kladné číslo, menší než počet bytů. 
> Experimentálně jsem došel k tomu, že se to děje při vytváření dalších 
> threadů pomocí g_thread_create() a navíc jen pod gdb. Existuje pro to 
> nějaké vysvětlení? Situaci dokážu detekovat a vyvolat write na zbytek 
> dat. Asi to tak dopadne. Ale rád bych měl jasno v tom, co se tu vlastně 
> děje. Systém je Sarge, glibc 2.3.2, gdb 6.3-debian používá 
> /lib/tls/libthread_db.so.1, glib 2.0. 

Toto chovani je v souladu s POSIXem, a Vase aplikace by na nej mela byt 
pripravena. Viz [1], predevsim pak 

"If write() is interrupted by a signal after it successfully writes some 
data, it shall return the number of bytes written."

[1] http://www.opengroup.org/onlinepubs/009695399/functions/write.html

-- 
Jiri Kosina


Další informace o konferenci Linux