BUGS3_http下载器条件判断处理顺序不合理出现僵尸线程

利用http协议实现wget功能,采用简单的socket实现,在编写代码时

pthread_t download_thread;
pthread_create(&download_thread,NULL,download,(void *) &client_socket);
pthread_join(down_load_thread,NULL);

download()
{
	...
	while((len=lwip_read(client_slocket,buf,buf_len)) != 0 && length < resp.content_length)
	...
}

显然在while的判断中有两个条件:
1.len != 0
2.length < resp.content_length
按照上述的顺序,在最后一次进入while时仍然会执行lwip_read(),而此时显然是无法再读到任何数据的,因为传输已经完成了。于是就出现了僵尸线程。
answer:
将while中的条件交换顺序即可

while(length < resp.content_length   &&   (len=lwip_read(client_slocket,buf,buf_len)) != 0)

当涉及多个条件利用&& || 判断时,将最简单最容易得出结果的放在前面。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值