您的位置:首页 > 房产 > 家装 > 微信公众号登陆_网站建设 开发人一丶一一人一一_友情链接发布网_关键词排名点击软件首页

微信公众号登陆_网站建设 开发人一丶一一人一一_友情链接发布网_关键词排名点击软件首页

2025/8/21 4:33:49 来源:https://blog.csdn.net/m0_74774362/article/details/147614195  浏览:    关键词:微信公众号登陆_网站建设 开发人一丶一一人一一_友情链接发布网_关键词排名点击软件首页
微信公众号登陆_网站建设 开发人一丶一一人一一_友情链接发布网_关键词排名点击软件首页

目录

一、条件变量概念

二、条件变量作用

三、基本操作


一、条件变量概念

条件变量是一种同步机制,通常用于线程之间的协调。在Linux系统中,条件变量通常与互斥锁一起使用,来实现线程的等待和唤醒操作。

条件变量允许一个或多个线程在满足特定条件之前等待,当条件不满足时,线程会被阻塞,直到其他线程通知该条件已满足。当条件满足时,其他线程可以通过发出信号通知条件变量,从而唤醒等待的线程。

二、条件变量作用

Linux条件变量是一种线程同步机制,用于实现线程之间的协调和通信。它允许一个线程在满足特定条件之前等待,然后在条件满足时被唤醒。

条件变量通常与互斥锁一起使用,以确保线程互斥地访问共享资源。当一个线程需要等待某个条件成立时,它可以调用条件变量的等待函数将自己挂起,然后在另一个线程修改条件并发送信号时被唤醒。

通过条件变量,线程可以更有效地进行同步和协作,避免了忙等待的情况,提高了程序的性能和效率。

三、基本操作

在Linux系统中,条件变量通常与以下函数一起使用:

  • pthread_cond_init:初始化条件变量
  • pthread_cond_wait:等待条件变量满足
  • pthread_cond_signal:发送信号唤醒一个等待的线程
  • pthread_cond_broadcast:发送信号唤醒所有等待的线程
  • pthread_cond_destroy:销毁条件变量
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<pthread.h>pthread_cond_t cond;
pthread_mutex_t mutex;
char buff[128]={0};//打印主线程输入的字符串
void* fun1(void* arg)
{while(1){pthread_mutex_lock(&mutex);pthread_cond_wait(&cond,&mutex);//阻塞pthread_mutex_unlock(&mutex);if(strncmp(buff,"end",3)==0){break;}printf("fun1 buff=%s\n",buff);}
}//打印主线程输入的字符串
void* fun2(void* arg)
{while(1){pthread_mutex_lock(&mutex);pthread_cond_wait(&cond,&mutex);//阻塞pthread_mutex_unlock(&mutex);if(strncmp(buff,"end",3)==0){break;}printf("fun2 buff=%s\n",buff);}
}int main()
{pthread_cond_init(&cond,NULL);pthread_mutex_init(&mutex,NULL);pthread_t id1,id2;pthread_create(&id1,NULL,fun1,NULL);pthread_create(&id2,NULL,fun2,NULL);while(1){fgets(buff,128,stdin);if(strncmp(buff,"end",3)==0){pthread_mutex_lock(&mutex);pthread_cond_broadcast(&cond);//唤醒所有线程pthread_mutex_unlock(&mutex);break;}else{pthread_mutex_lock(&mutex);pthread_cond_signal(&cond);//唤醒一个线程pthread_mutex_unlock(&mutex);}}pthread_join(id1,NULL);pthread_join(id2,NULL);pthread_mutex_destroy(&mutex);pthread_cond_destroy(&cond);exit(0);
}

 

pthread_mutex_t mutex:声明一个互斥锁,用于保护共享资源(如 buff)。

pthread_cond_t cond:声明一个条件变量,用于线程间的同步。

pthread_mutex_lock(&mutex):加锁,确保对共享资源的访问是线程安全的。

pthread_mutex_lock(&mutex):解锁。

条件变量必须与互斥锁一起使用,以确保对共享资源的访问是线程安全的。

两个线程不能同时操作,所以要加互斥锁,保证他俩只能有一个在等待状态。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com