加入收藏 | 设为首页 | 会员中心 | 我要投稿 东莞站长网 (https://www.0769zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

Linux环境下实现生产者消费者问题

发布时间:2021-01-22 03:37:22 所属栏目:Linux 来源:网络整理
导读:div class="cnblogs_code" include stdio.hspan style="color: #000000;" include semaphore.hspan style="color: #000000;" include stdlib.hspan style="color: #000000;" include pthread.hspan style="color: #000000;" include unistd.h span style="co

<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;"&gt;int</span><span style="color: #000000;"&gt; i;
</span><span style="color: #0000ff;"&gt;int</span><span style="color: #000000;"&gt; ret1[N1];
</span><span style="color: #0000ff;"&gt;int</span><span style="color: #000000;"&gt; ret2[N2];

</span><span style="color: #0000ff;"&gt;int</span> ini1 = sem_init(&amp;empty_sem,<span style="color: #800080;"&gt;0</span>,M);  <span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;初始化空缓冲区 为 M(10)</span>
<span style="color: #0000ff;"&gt;int</span> ini2 = sem_init(&amp;full_sem,<span style="color: #800080;"&gt;0</span>);<span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;初始化满缓冲区  0</span>
<span style="color: #0000ff;"&gt;if</span>(ini1 &amp;&amp; ini2 != <span style="color: #800080;"&gt;0</span><span style="color: #000000;"&gt;)
{
    printf(</span><span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;Sem init failedn</span><span style="color: #800000;"&gt;"</span><span style="color: #000000;"&gt;);
    exit(</span><span style="color: #800080;"&gt;1</span><span style="color: #000000;"&gt;);
}

</span><span style="color: #0000ff;"&gt;int</span> ini3 = pthread_mutex_init(&amp;mutex,NULL);<span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;初始化互斥信号量</span>
<span style="color: #0000ff;"&gt;if</span>(ini3 != <span style="color: #800080;"&gt;0</span><span style="color: #000000;"&gt; )
{
    printf(</span><span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;mutex init failedn</span><span style="color: #800000;"&gt;"</span><span style="color: #000000;"&gt;);
    exit(</span><span style="color: #800080;"&gt;1</span><span style="color: #000000;"&gt;);
}

fp </span>= fopen(<span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;/.data.txt</span><span style="color: #800000;"&gt;"</span>,<span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;r</span><span style="color: #800000;"&gt;"</span>);<span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;打开文件Data.txt</span>
<span style="color: #0000ff;"&gt;if</span>(fp == NULL) exit(<span style="color: #800080;"&gt;1</span><span style="color: #000000;"&gt;);

</span><span style="color: #0000ff;"&gt;for</span>(i = <span style="color: #800080;"&gt;0</span>; i < N1; i++<span style="color: #000000;"&gt;)
{
    ret1[i] </span>= pthread_create(&amp;id1[i],NULL,product,(<span style="color: #0000ff;"&gt;void</span>*)(&amp;i));<span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;创建生产者线程</span>
    <span style="color: #0000ff;"&gt;if</span>(ret1[i] != <span style="color: #800080;"&gt;0</span><span style="color: #000000;"&gt;)
    {
        printf(</span><span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;product%d creat failedn</span><span style="color: #800000;"&gt;"</span><span style="color: #000000;"&gt;,i);
        exit(</span><span style="color: #800080;"&gt;1</span><span style="color: #000000;"&gt;);
    }
}

</span><span style="color: #0000ff;"&gt;for</span>(i = <span style="color: #800080;"&gt;0</span>; i< N2; i++<span style="color: #000000;"&gt;)
{
    ret2[i] </span>= pthread_create(&amp;id2[i],consume,NULL);<span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;创建消费者线程</span>
    <span style="color: #0000ff;"&gt;if</span>(ret2[i] != <span style="color: #800080;"&gt;0</span><span style="color: #000000;"&gt;)
    {
        printf(</span><span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;consumer%d creat failedn</span><span style="color: #800000;"&gt;"</span><span style="color: #000000;"&gt;,i);
        exit(</span><span style="color: #800080;"&gt;1</span><span style="color: #000000;"&gt;);
    }
}


</span><span style="color: #0000ff;"&gt;for</span>(i = <span style="color: #800080;"&gt;0</span>; i < N1; i++<span style="color: #000000;"&gt;) {pthread_join(id1[i],NULL);}
</span><span style="color: #0000ff;"&gt;for</span>(i = <span style="color: #800080;"&gt;0</span>; i < N2; i++<span style="color: #000000;"&gt;) {pthread_join(id2[i],NULL);}

exit(</span><span style="color: #800080;"&gt;0</span><span style="color: #000000;"&gt;);

}

?

(编辑:东莞站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读