<span style="color: #0000ff;">int<span style="color: #000000;"> main()
{
pthread_t id1[N1];<span style="color: #008000;">//<span style="color: #008000;">定义生产者线程
pthread_t id2[N2];<span style="color: #008000;">//<span style="color: #008000;">定义消费者线程
<span style="color: #0000ff;">int</span><span style="color: #000000;"> i;
</span><span style="color: #0000ff;">int</span><span style="color: #000000;"> ret1[N1];
</span><span style="color: #0000ff;">int</span><span style="color: #000000;"> ret2[N2];
</span><span style="color: #0000ff;">int</span> ini1 = sem_init(&empty_sem,<span style="color: #800080;">0</span>,M); <span style="color: #008000;">//</span><span style="color: #008000;">初始化空缓冲区 为 M(10)</span>
<span style="color: #0000ff;">int</span> ini2 = sem_init(&full_sem,<span style="color: #800080;">0</span>);<span style="color: #008000;">//</span><span style="color: #008000;">初始化满缓冲区 0</span>
<span style="color: #0000ff;">if</span>(ini1 && ini2 != <span style="color: #800080;">0</span><span style="color: #000000;">)
{
printf(</span><span style="color: #800000;">"</span><span style="color: #800000;">Sem init failedn</span><span style="color: #800000;">"</span><span style="color: #000000;">);
exit(</span><span style="color: #800080;">1</span><span style="color: #000000;">);
}
</span><span style="color: #0000ff;">int</span> ini3 = pthread_mutex_init(&mutex,NULL);<span style="color: #008000;">//</span><span style="color: #008000;">初始化互斥信号量</span>
<span style="color: #0000ff;">if</span>(ini3 != <span style="color: #800080;">0</span><span style="color: #000000;"> )
{
printf(</span><span style="color: #800000;">"</span><span style="color: #800000;">mutex init failedn</span><span style="color: #800000;">"</span><span style="color: #000000;">);
exit(</span><span style="color: #800080;">1</span><span style="color: #000000;">);
}
fp </span>= fopen(<span style="color: #800000;">"</span><span style="color: #800000;">/.data.txt</span><span style="color: #800000;">"</span>,<span style="color: #800000;">"</span><span style="color: #800000;">r</span><span style="color: #800000;">"</span>);<span style="color: #008000;">//</span><span style="color: #008000;">打开文件Data.txt</span>
<span style="color: #0000ff;">if</span>(fp == NULL) exit(<span style="color: #800080;">1</span><span style="color: #000000;">);
</span><span style="color: #0000ff;">for</span>(i = <span style="color: #800080;">0</span>; i < N1; i++<span style="color: #000000;">)
{
ret1[i] </span>= pthread_create(&id1[i],NULL,product,(<span style="color: #0000ff;">void</span>*)(&i));<span style="color: #008000;">//</span><span style="color: #008000;">创建生产者线程</span>
<span style="color: #0000ff;">if</span>(ret1[i] != <span style="color: #800080;">0</span><span style="color: #000000;">)
{
printf(</span><span style="color: #800000;">"</span><span style="color: #800000;">product%d creat failedn</span><span style="color: #800000;">"</span><span style="color: #000000;">,i);
exit(</span><span style="color: #800080;">1</span><span style="color: #000000;">);
}
}
</span><span style="color: #0000ff;">for</span>(i = <span style="color: #800080;">0</span>; i< N2; i++<span style="color: #000000;">)
{
ret2[i] </span>= pthread_create(&id2[i],consume,NULL);<span style="color: #008000;">//</span><span style="color: #008000;">创建消费者线程</span>
<span style="color: #0000ff;">if</span>(ret2[i] != <span style="color: #800080;">0</span><span style="color: #000000;">)
{
printf(</span><span style="color: #800000;">"</span><span style="color: #800000;">consumer%d creat failedn</span><span style="color: #800000;">"</span><span style="color: #000000;">,i);
exit(</span><span style="color: #800080;">1</span><span style="color: #000000;">);
}
}
</span><span style="color: #0000ff;">for</span>(i = <span style="color: #800080;">0</span>; i < N1; i++<span style="color: #000000;">) {pthread_join(id1[i],NULL);}
</span><span style="color: #0000ff;">for</span>(i = <span style="color: #800080;">0</span>; i < N2; i++<span style="color: #000000;">) {pthread_join(id2[i],NULL);}
exit(</span><span style="color: #800080;">0</span><span style="color: #000000;">);
}
? (编辑:晋中站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|