网络编程死锁小问题

网络编程时遇到的死锁小问题

(死锁是循环等待临界资源,而以下并不是循环等待,而是临界资源一直被占用不释放而发生的问题……在写这篇文章前没有很好的考虑死锁的定义的问题,所以很鲁莽的写下了下边的东西,又什么问题请多多指教。)

      在做网络编程的时候,遇到了一个问题,需要使用FILE指针,打开一个套接字(socket)的流,客户端分别有两个线程对数据进行处理,一个线程是处理接收数据,设称为ThreadReceive()线程,另外一个线程为处理发送数据,设称为ThreadSend()线程,在编程时,只使用了一个FILE指针,在ThreadReceive()线程中需要用到此FILE指针接收数据,在ThreadSend()线程中需要使用此FILE发送数据,这时问题就来了:当ThreadSend()发送消息时需要用到FILE指针将数据传输出去,而FILE指针正被ThreadReceive()线程占用接收数据没有释放,所以ThreadSend()线程就会等待FILE指针被ThreadReceive()释放,这就导致了死锁……。在程序运行时的表现就是,程序运行到发送函数时就停止不运行了……用了一个下午的时间来解决这个问题,也就是声明两个FILE指针,一个专门用于发送线程(ThreadSend())另一个专门用于接收线程(ThreadReceice()),这样两个线程就不会去竞争着使用临界资源(一个FILE指针)。

死锁情况如图:(图见附件)



--还没想过自己在编程时还会遇到这样的问题,郁闷呀……不过也是第一次这么真实的接触到死锁这个概念,以前都是从课本上看到的,以后自己还要多学习学习呀。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值