【本文链接】
http://www.cnblogs.com/hellogiser/p/double-threads-to-download-and-write.html
【题目】
网络上下载数据,然后存储到硬盘上。简单做法是:先下载一块然后写到硬盘,然后再下载,再写到硬盘上。
缺点:需要先下载完才能写入硬盘,下载和写是串行操作。
改进:让两个线程并行进行,设置缓冲区,采用信号量的形式。
下载线程,只要缓冲区有空余就下载,下载完成之后告诉写线程缓冲区有数据了。
写线程,只要缓冲区有数据就写入,写完后告诉下载线程缓冲区有空闲了。
【代码】
c code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
// /* version: 1.0 author: hellogiser blog: http://www.cnblogs.com/hellogiser date: 2014/7/4 */ //---------------------api------------------------------ //downloads a block from internet sequentially in each call //return true, if the entire file is downloaded, otherwise false. bool getblockfromnet(block *out_block); //writes a block to hard disk class thread class semaphore class mutex //1.确定使用信号量,而非互斥量,保证并行操作 //缓冲区数组,模拟循环队列 //一开始缓冲区空间为max_count,整个缓冲区可供下载的数据填充 //下载任务是否完成 void proca() //当任务全部下载完成,进程就可以结束了 void procb() //当任务全部下载完成,并且所有的数据都存储到硬盘中,进程才可以结束 int main() |
【参考】
http://www.cnblogs.com/daniagger/archive/2012/03/23/2413764.html
http://www.cnblogs.com/youxin/p/3586975.html
http://blog.csdn.net/tianshuai1111/article/details/7692213
【本文链接】
http://www.cnblogs.com/hellogiser/p/double-threads-to-download-and-write.html