本文主要是介绍C语言之再讲pthread_cond_wait与pthread_cond_timedwait区别(七十八),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!
优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀
人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.
文章目录
- 1.前言
- 2.代码示例
1.前言
本篇目的: 理解pthread_cond_wait与pthread_cond_timedwait用法区别
函数 | 区别 |
---|---|
pthread_cond_wait | 与pthread_cond_signal函数成对出现,如果没有pthread_cond_signal给它发信号,它死等,等到天荒地老… |
pthread_cond_timedwait | 自己设置超时时间,一旦超过设定时间,自动执行pthread_cond_timedwait函数后边的代码。如果pthread_cond_signal在pthread_cond_timedwait设置超时时间之前给它发信号,它会收到信号,提前结束等待。 |
2.代码示例
#include <iostream>
#include <pthread.h>
#include <unistd.h>
#include <sys/time.h>using namespace std;pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;#define WAIT 1void* thread_func(void* arg) {struct timeval now;struct timespec outtime;gettimeofday(&now, NULL);outtime.tv_sec = now.tv_sec + 3;//超过3s后自动处理outtime.tv_nsec = now.tv_usec * 1000;cout << "Thread waiting for signal..." << endl;pthread_mutex_lock(&mutex);#if WAIT//1.如果不调用pthread_cond_signal(&cond)函数发信号,永远死等.pthread_cond_wait(&cond, &mutex);cout << "Thread recevie pthread_cond_signal() send signal, it's delay 1s." << endl;
#else//2.可以设置超时时间,一旦超过设定时间,自动执行pthread_cond_timedwait函数后边的代码,它不受pthread_cond_signal的影响.pthread_cond_timedwait(&cond, &mutex, &outtime);cout << "Thread timed wait for 3s." << endl;
#endifpthread_mutex_unlock(&mutex); return NULL;
}int main() {pthread_t thread;pthread_create(&thread, NULL, thread_func, NULL);//1.给pthread_cond_wait发信号(它俩是成对出现的),使其后边的代码可以执行.
#if WAITsleep(1);pthread_cond_signal(&cond);
#endifpthread_join(thread, NULL);return 0;
}
这篇关于C语言之再讲pthread_cond_wait与pthread_cond_timedwait区别(七十八)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!