想做一个关于服务器程序,涉及收发消息和读写文件。计划用三线程来实现,三线程说明如下:
1. 主线程:负责接收消息,以及逻辑处理,进行读文件和写文件。由于读写文件非常耗时,避免卡死所以分给子线程来做。
2. 读线程:负责读文件。
3. 写线程:负责写文件。然后问题就来了,主线程读完文件之后,不是只为读而读,读完还要做处理。但是,该方案中读文件是给读线程做的,主线程难道要不断等待,等读线程读完了才继续执行下去?这样的话就跟单线程没有区别了。写文件也一样,写时发生错误的话,主线程还是有后续操作的,难道又是等待?
于是,我想用触发的方式来解决。即读完文件后,由读线程来触发主线程未完成的操作。这样问题是解决了,但程序架构会很散,很累赘,不知道好不好。所以,求教一下大家,有没有什么好的方案,既能避免主线程因读写文件而卡很久,又能有好的程序架构,而且看起来专业。
或者有什么资料可以参考一下?

解决方案 »

  1.   

    可以这样设计:
    首先有两个栈,读、写,这两个栈用来存放要读写文件的相关信息。
    有一个线程用来接收网络上的消息,并把消息分成读、写,当是读消息时,把要读的相关信息压入读栈,如果是写文件信息,就把要写入文件的相关信息压入写栈。
    有一个读线程,一个写线程。
    读线程循环的从读栈中取消息(pop),取出一条处理一条。
    写线程循环的从写栈中取消息(pop),取出一条处理一条。
    压栈和出栈的时候,要有同步处理过程,因为你要压栈,又要从栈中取出一条并删除,是互斥的。