可以看到在线程执行函数中打印出了,主 函数中赋值的结
构体,即 将这个结构体传递进了线程执行函数。
实验no5on 线程等待
● 实骀咽 的:
通过使用pthread」on系统调用,理 解线程和进程的执行顺序
● 实验要求:
编写应用程序,创 建一线程,进 程需等待到该线程结束后才能
Ⅱ 继 续执行
∵ ∷ ∶|∶。|’∶∷
,Ⅱr△ △∷ ∶∷
∷∷0实 验器材:
软件:
安装了RHEL5的 ψm而。re虚拟机
硬件:PC机 一台
● 实验代码与
分析
定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析
:
实 验 代 码 2=5ˉ 2thread」 on。c
柏n0ude《pthreo-:Ⅱ)
∷#inolu-e-unis!口Ⅰh)∷
社 i宀oludo《stdo∶h。 ¨
∷ ∷ V0-⒈ Ⅱhrea-(v0i凵 Istr)∷∶ ( ∷ ∷ ∷
∷
int∷i;
for C〓0;i<3;++D
(
s丨eep(2);
p"ntfl叮his in the thread∶%dN卩 ,i)∶
公司地址:∷成都∷市牛王庙东∷恒∷国际△拣2期 氵Oq ⒆ 3
)
return NULL∶
)
int mainO
(
pthread」pth;∷
int i;
厂创建线程并执行线程执行函数γ
int ret〓pthre窕~Createl&pth,NULL,thread,NULL);
p"n亻 CThe main∷process wⅢ be to run,but wⅢ be blocked
soon\n")∶
虍阻塞等待线程退出γ
pthread」oin(pth,NULL);
pontf(·℃hread was exkkn")∶
∷for C〓 0;i<⒊ △+i)
( =
sleep(1);
pHn亻(·this in the main:%dⅥ∷,i)∶
)
return O;
)
代码分析
进程在创建线程后是各 自独立运行的,也 就是说线程和进
程都在运行。pthread」on系统调用会使进程阻塞等待线
程,所 以进程会出现运行一句打印语句后阻塞,直 到线程
退出才继续运行。
● 实验步骤:
公司地址:戚 都市牛王庙东恒国际△栋2期 7" 194
1.进 入∷实验代码 目录2ˉ s2
::。 °te亠ogthoot o0do^毋 。 d 2ˉ s。2
::° 。te亠o¤Ⅰ亠ho臼t 20s△ 2:艹 △ 峦
::::∶:=:::li:∴t 2。s冖2】守 1
进 入 目录 ⒉ ⒌ 2后 可 以 看 到 实 验 参 考 代 码 thread」on。c
、、∴∶
2.编 译 应 用 程 序 thread」on。c
命 冷∷ gcc thread」oin.c。o thFead」oin
∶望l心跖蹒嬲翻弼嬲翻瑙鹬蠲嘤篷啜邈蠲Ⅱ口镧躞黪黠婴婴蠲龊鳓篷嘤嘤鲫嘤
,〖:oote△oo△h。 ot n△§△21o ェ 。 ⌒
:丿h“·J亻L户 p吝ho。
露 严
e亠°
叩
”
∵ 氵 γ :婵 ∵
m∵
∵
°c∵
?m∵ 屮 ∵
如
∷
各【:ootei亠。oo=ho臼t 2△ s。2:艹 △。 '
詹器搬羝拧毖拧玎 ∵
∶孑 .
∶ 纟
用 gcc命 令 编 译 啪 read」oin。c生 成 可 执 行 文 件 thread」oin
3.运 行应用程序
∵
∷∶∷∶∷∷
J。 h ∷
、Ⅱ陀 ∷,m∷ bo∴、ェ。。hd∶o0m∶
鼯 絷 护 ¨ ∷
黯 奋嵌馊 ∷
琏:仑:戚烈%三s:2:。 聪
公哥地址:戍 都市牛王庙∷东恒国标丬栋2期 甲" 195
运行程序我们会发现创建线程而没有调用thread」on之前
线程和进程是同时运行的,调 用threa-」on之后进程阻塞
直到线程退出。
实验 2ˉ ssˉ 线 程退出保护设计
● 实验 目的:
学会使用线程清理函数
● 实验要求:
编 写 应 用 程 序 ,创 建 一 线 程 ,使 用 pthread~deanup~push和
∶pthreadェdean0p pop进行退出保护
● 实验器材:
软件:
安装了RHEL5的 vmware虚扌涕机
硬件:PC机 一台
● 实验代码与分析 :
实取釜代樱2·5 3¨thread clean,c
#include(stdio。h>
#inc丨ude
#inc丨ude《 unistd。h)
虍线程清理函数γ
Void★Cleanlvoid★arg)
t
pHnfl划eanup∶%sk卩 ,lchar→arg);
公司地址:戍 都市牛王庙东恒国际1栋 2期 ∷7" 196
retum lvoid Ⅱ)0∶
)
虍线程1的执行函数γ
Void★thr fn1(void★arg)
(
p"ntfCthFead1sta吐 kn");
pthread_cleanup Void”)0lean,.1hread1first∴handIeF’);
'_push( (void*)clean, second
hadle卩);
pⅡntflηhread10ush∴∞ mplete knη;
r⒃rg)
(
retum((vod·)1);〃线程运行到这里会结束,后 面的代码不
会被运行。由于是用retum退出,所 以不会执行线程清理函数。
)
pthread cleanup~pop(o);
∷卩thread cleanup亠po∷p(o);
retum lvod礻)1:
)
虍线程2的执行函数γ
Void·thr m烈 void%rg)
(
pontfl`hread2sta吐 Nn");
虍将线程清理函数压入清除栈两∷次〃 ∷
pthreadェcleanup亠push【《ˇ o泅!)dean;妯 read2旧rst handIe卩);
pthrea-~deanup亠pushC(v0id艹)dean,`hread∶2se∞ nd
handler’);
p。nfl”thread∷2push∞ mplete∷`吖冫
if(arg)
( ∷ ∴ ∷ ∷ ∷
pthreaⅡ娥((vod→2);〃线程运行到这里会结束,后面的代
码不会皲运行∴曲于是用pthreadⅡ娥退出”所以会执行线程清理函
虍将线程清理函数压入清除栈两次γ
公司∷地址:成 都市牛王庙东恒∷国际咽栋2期 7田 197
数。执行的顺序是先压进栈的后执行,即 后进先出。
)
pthrea辶cleanup~pop(叱'° 氓 豇 励 纠 纯 l9f'猁 3珏 沔々 0细 招
pthread~cleanup~pop(0);
pthread~ex⒒((void★)2);
)
int mainlvoid)
(
int err;
虍创建线程1并执行线程执行函薮Ⅳ
erFpthread~createl&Ⅱd1,NULL,thr fn1,lvoid★” );
ifferr!=o)
(
p"ntfCe盯0r。⋯ \″
,);
return-1;
)
虍创建线程2并执行线程执行函数γ
eFpthread∷ create(&刂d2iNULL∫ hr|fn2,(v0id△)1);
if(err!〓o)
(
pHntfl"error.⋯Nn");
returnˉ 1;
l
焉哪 T艇叩
pHnfl℃ rror。⋯ ln,);
returnˉ1;
)
ρHnfl`hread丬ex⒒code%d Nn",Cnt江 ret);
严阻塞等待线程2退出,并 获取线程2的返回值γ
ptu望d」 Ⅱd1,刂d⒉
公司地址:成 都市牛王庙东恒∷国际 1栋 2期 氵OJ l9∷8
err=0thFea-」on【t¢2,sttret);
if(err!±o)
(
pHnfl℃ rror。⋯
")∶
return·1∶
)
pHntfl`hread2exk code%d
return∶1;
)
● 实验步骤:
1.进 入实验代码 目录⒉5os
、h|∶,fntltret);
lroot€,ltcrLbor't
lnootltresdtralt
C△△^ n‘c
locrtlmrt
00白 0:△ ¤ d 2。 s△3
2∶书 刂Ⅱ LJ
2刂咱:lu
讠ii∷》|| ∷进人目录2弱⒔后可以看到实验参考代码thread~dean。c
2.编 译 应 用 程 序 妯 read dean。c
∷ ∷命 ∵令 :勺 0o如 Fea-~clean亠o-o th油 耐 Clean
:亡ooma。。。h。。t nt∷△s:扌 ∴臼
Ⅱ ∞ te△。Ⅱ 山 cⅡt:· 0cs:0Ⅱ t t汪 Ⅱ d冖 工0抵 ·0Ⅱ u0。 。d∷△△-ˉ △p汀 扌
::。 0t臼△0oom。 。t ε ·$△ 9Ⅱ 0 ∴ 。
用g∞命令编译啪read~dean。c生成可执行文件
公司啦址:成 嘟市∷牛主庙|架恒珥际Ⅱ豇:拣⒓∴期抑m l,9
thread c|ean
root刨ocalhosu
l root8locallrost 3-$-31# Is
thre*d*claan thr*ad*clean"c
lroot0Localhoat 2-5-31# ./three*.
thread 1 start
X prah coryrlcte
|th=e⒏d 缸 εX主t oode ⒊
0扭d 2 阝 t扛:t
ad 2 prch comtrrl*te
icle*nrqr :thx*nd 2 s*cond handler
o廴8anup :uh=θ已u 2 饣 △‘。t haoR译 r
th=e8d 2 § Ⅱ亠t ¤9do 2
Ir。 °电姆△o¤ 狃工ho蜜 t∷ 2△ s△ 3,奋 :
程序的运行结果可以看到线程1和线程2运行的效果因为退
出方式的不一样是不同的。
实 ∵验 nosˉ1 TC∷ P∴ 程 序 设 计
● 实验 目的:
学会凵nuX的socket套接字网路编程,熟 悉使用TCP传 输
协议
离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载
的网路编程
流程
快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计
● 实验要求:
1.编 写使用TCP协 议的服务器程序
2.编 写使用TCP协 议的客户端程序
3.客 户端向月艮务器发送字符串,月艮务器打印收到的字符串
● 实验器材:
3.运 行应用程序
公司地址:成 都市牛王庙东恒国际1栋 2期 7" 200
软件:
安装了RHEL5的 vmware虚拟机
硬件:PC机 一台
● 实验代码与分析:
实 验 代 码
2¨ 6ˉ 1tCp~seⅣ er。 c
#inClude(stdⅡb。h>
#incIude(stdio。h>
社inCIude(e`rno。h》
社in0lude
#include(netdb。h>
#incIude
#include(netineVin。h>
#inc丨ude(sy§ `socket.h>
#de羽 ne portnumoer3833
int main(int a四c,char★argv口)
(
int sockfd,neW fd;
∷ struct sockadd辶 Jn soⅣe廴addⅡ
struct sockaddr~in c"en辶addr;
int sin~size;
int nbytes;
char bufer【1020l;
卢 月艮务 器端 开 始 建 立 so0kfd描述符 γ
ifl(sockfd〓soCketlAF=丨NET,s0CK£ TREAM,0上 〓ˉ 1)〃
AF~丨NET:IPV0:sOC廴 § TREAM∶ TCP
(
fponflstderr,”socket error%sXnX酽,strerrorlerrno));
exit(1)∶
)
广 服 务 器 端 填 充 sockaddr结 构 γ
公司地址:成 都市牛工庙东恒国际1栋 2期 7" 201
bzero(&server_addr,sizeof(struct sockadd r,in)); // 初始化,置0
sen疋丌⊥ad弓r。sin family〓AF~lNET; 〃 丨PV4ˉ ˉ ● ˇ ˇ =~¨ ¨ ˇ ⋯ v"i~:u"":J '"~"、 LI’ ″ 】 I Vi
seⅣer addr。sin addr。s addr=hton丨llNADD刂 NΥ ); 〃 四臣迹辶
机 器上的 据转化为网络上的面面薮搭泖昭瑶拜葫碥邕运行在任
以是任意lP地址,即 月艮
务器程序可以绑定到所有的丨P上
∷〃so″er卩ddr。sin a-d∴s addFinet addrl"19?.168·1·1∶∶); Ⅱ〃用
于 绑 定 到 一 个 固定 lP,het addr用于把 数 字 加 格 式 的Ⅱ转 化 ”整 形 Ⅱ
∷
server addr.sin ∶port〓∷hbns(po吐口umberl;
器上的sh渊潋据转化为网络上的sh渊潋据)端口号
疒捆绑sockfd描述符到P地 址 γ ∷
〃-(将本机
以
ω G骅 刊
fpHntflstder,"B∶nd error%slnla1strerro吖eFrnol);
e×it(1);
) ∷ ∶
严设∷五允许连接妁最大客广端数 勹 ∷
qK 亻 ”=〓ˉ1)
〈 ∶ ∶
∷ Ⅱ fp"nflstde汀'usten error%斌hu1strerorlermol、
∷eXit(1);
) ∷ ∷
while(1)
( ∷
§耀 钸 糕磊露黯 ∷
iflt∞w~fd|acceptlsookfdKstⅡd&℃ kaddr
0【ad。nt ad弼旧 渐 匚 函 苟 F孑 t∷ ∵
— — ∵ 一 t
T l ∷ ∷ ∷
fpHntflstd0吒”AcCept e「or∷%sln忆1strerro《errnolλ
ex以1);
∷ ∷ ∷ ) ∷
∷ ∷ ∷ ∷ ∷
fp"ntftstde「,"server get conned∶on from
%sl卩 meLnt。 ald。nt addr.。n~ad-啦 〃 将 网 络 地 址 转 换 成 。字 符
串 ∷ ∷ ∷ ∷ ∷ ˉ
公哥地址:戍 嘟市∷牛王∷庙柒恒∷囤际⒋栋2∴期叩" ∴ ⒛2