分类: LINUX
2012-07-04 09:30:33
由于项目中在多线程里使用了fifo作为数据传输的通道,所以对fifo进行测试。
1)在进程测试中,A线程生成和写fifo,B线程读fifo。
(1)首先fifo的使用需要root权限,这个需要注意。
(2)先运行A线程,会在打开写fifo线程时阻塞,直到B线程打开读fifo。这时可以正常写和读。
(3)在写的间隔慢于读的间隔时,读会阻塞等待。但在写的间隔快于读的间隔时,如果此时每次读的数据量多于每次写的数据量,则一次可以读取多此写的数据。
(4)如果B进程终止,那么A线程会收到SIGFIFO信号,终止程序。
(5)如果A进程终止,那么B线程会读取完管道内存在的数据,如果继续读取,则read程序立即返回0.
2)在多线程测试中,情况和进程有不同。
(1)同上面(1)
(2)写多线程和读多线程之间阻塞和上面相同,需要同时打开读写才可以继续前进。
(3)当读线程退出时,写线程没有收到SIGFIFO信号,继续写,但此时实际上并没有写成功。
(4)当写线程退出时,这是读线程不是返回0,而是读等待,这些表现和进程是有区别的。