Linux- 7-线程条件控制及实现线程的同步

线程信号:
上一节中我们学了可以用锁来帮助控制线程的执行与否,那么我们经常想要先让一个线程先执行,等他执行之后另一个线程紧接着执行,这个时候就可以搭配cond这个信号来使用锁。
首先还是要看手册,声明一个cond量并在主函数里初始化,

当某个条件发生的时候,我t1才去做某个事情   以下程序代码实现

记住:触发与广播的区别是 :触发只发一条,而广播可以向多个线程发消息

pthread_mutex_t mutex;
pthread_cond_t cond;

 int terdata=0;
void*fund1(void*arg){
    while(1){
        pthread_cond_wait(&cond,&mutex);
           if(terdata==3){
                 printf("t1=%d -------------------\n",terdata);
                 terdata=0;
                 sleep(1);
               }
   }

}

void*fund2(void*arg){

  while(1){
           pthread_mutex_lock(&mutex);

              printf("t2 terdata=%d \n",terdata++);
      if(terdata==3){
             pthread_cond_signal(&cond);
                          }
             pthread_mutex_unlock(&mutex);
                      sleep(1);
               }


          // printf("t2 terdata=%d \n",terdata++);


}

int main(){

int ret;
pthread_t t1;
int arg=100;
pthread_t t2;
      pthread_cond_init(&cond,NULL);
    pthread_mutex_init(&mutex,NULL);


     ret=pthread_create(&t1,NULL,fund1,(void*)&arg);
    if(ret==0){
          printf(" main  t1 pthread create success!!!\n");
        }

     ret=pthread_create(&t2,NULL,fund2,(void*)&arg);
    if(ret==0){
          printf(" main t2 pthread create success!!!\n");
        }
   pthread_join(t1, NULL);
   pthread_join(t2, NULL);

  pthread_cond_destroy(&cond);

  pthread_mutex_destroy(&mutex);
return 0;
}

其中重点是t2线程里面的sleep特别重要,要给出signal和wait一点响应时间,不然实现不了t1里面的内容,一直会停流在t2线程里面。

运行结果为:

CLC@Embed_Learn:~/thread$ ./a.out
 main  t1 pthread create success!!!
 main t2 pthread create success!!!
t2 terdata=0 
t2 terdata=1 
t2 terdata=2 
t1=3 -------------------
t2 terdata=0 
t2 terdata=1 
t2 terdata=2 
t1=3 -------------------
t2 terdata=0 
t2 terdata=1 
t2 terdata=2 
t1=3 -------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

追着太阳跑1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值