- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
电子科技大学通信学院
《网络软件设计实验指导书》
并发服务实验
编写者 段景山
2014年9月并发服务实验
【实验目的】
掌握并发服务程序设计的特点
体会并发服务程序执行特点
了解进程(线程)控制、调度的原理和方法
掌握向子线程参数的方法CreateThread()来创建线程。系统在多个相同优先级的线程之间按照分时片方式调度。
CreateThread( )共有6个参数,本实验中创建的子线程没有什么特殊的要求,因此六个参数只使用了两个,还有一个是输出参数,其余的3个参数可以填0或NULL。如下所示
dwThrdParam = (DWORD)sock;
hThread = CreateThread(
NULL, // no security attributes
0, // use default stack size
server_proc, // thread function
dwThrdParam, // argument to thread function
0, // use default creation flags
dwThreadId); // returns the thread identifier
参数3是线程的函数指针,指明线程执行的程序体;
参数4是线程参数指针,当线程开始执行时,如果需要向线程传递初始化参数,可以使用这个指针。如在本实验中,需要将主线程accept得到的新连接套接字标识符传递给子线程,让子线程控制这个连接上的通信,我们使用dwThrdParam参数在主、子线程之间传递套接字标识符。
参数6是输出参数,让主线程得到子线程的标识符,这样当主线程需要强制关闭或控制子线程时,就可以利用这个标识符。当然一般情况下,主线程都会放任让子线程自行执行到结束。
在创建多线程工作,还必须关注向子线程传递参数的。CreateThread()函数求的参数4为指针类型,我们却不能简单地某个变量的地址来应对,这是其它场景中常用的方法。:如果被取地址的这个的内容是常变的,在多线程环境下,就很有可能在子线程还没来得及去取其内容就了改变,取出的内容与创建时传递进去的内容不一致很可能参数失误导致子线程功能的失败。
这个实验而言主线程在接受新连接后会将新的套接字保存到一个变量设为ns中,变量满足了内容常变的而且这个新的套接字标识符我们希望传递给新创建的子进程每个子进程都拿到不同的标识符,因为子进程就是为此而的。
取ns的地址作为参数,在,我们发现上述现象。
向子线程传递参数,是保证每个线程传递的参数放在独立的空间里。
做到这一点,最直接的做法是为参数申请动态空间),把动态空间地址——指针传递进去。每次申请动态空间得到不一样的内存区域,就能保证参数放在不同的独立空间里。如
SOCKET * p;
p = malloc(sizeof(SOCKET)); //获得动态空间*p = ns; //填入待传递的参数hThread = CreateThread(
NULL, // no security attributes
0, // use default stack size
server_proc, // thread function
p, // argument to thread function
0, // use default creation flags
dwThreadId); // returns the thread identifier
在子线程中:
DWORD WINAPI server_proc( LPVOID lpParam )
{
SOCKET sock;
sock = *(SOCKET*)lpParam;//的参数值;
free(lpParam); //借有还技巧性的方法是直接利用参数本身的4字节空间,传递4字节的信息。类型的变量本质是整数,所以可以利用
hThread = CreateThread(
NULL, // no security attributes
0,
您可能关注的文档
- 通信原理精品教学(任通菊)第2章 基础知识2015.ppt
- 四肢骨折-教学课件.pdf
- 通信原理精品教学(任通菊)第3章 模拟传输.pptx
- 通信原理精品教学(任通菊)第4章 数字基带传输.pptx
- 通信原理精品教学(任通菊)第6章 模拟信号数字化与PCM.pptx
- 通信原理精品教学(任通菊)第8章 现代通信传输技术.pptx
- 通信原理精品教学(任通菊)第七章习题参考解答.pptx
- 通信原理精品教学(任通菊)第5章 基本的数字频带传输.pptx
- 通信原理精品教学(任通菊)作业解答-CH1.doc
- 通信原理精品教学(任通菊)作业解答-CH8.doc
- 新高考生物二轮复习讲练测第6讲 遗传的分子基础(检测) (原卷版).docx
- 新高考生物二轮复习讲练测第12讲 生物与环境(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第3讲 酶和ATP(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第9讲 神经调节与体液调节(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第11讲 植物生命活动的调节(讲练)(原卷版).docx
- 新高考生物二轮复习讲练测第8讲 生物的变异、育种与进化(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第5讲 细胞的分裂、分化、衰老和死亡(讲练)(原卷版).docx
- 新高考生物二轮复习讲练测第5讲 细胞的分裂、分化、衰老和死亡(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第12讲 生物与环境(讲练)(原卷版).docx
- 新高考生物二轮复习讲练测第11讲 植物生命活动的调节(检测)(原卷版).docx
文档评论(0)