linuxc阻塞等待线程字符应答
时间: 2023-07-17 11:11:03 浏览: 49
在 Linux 中,可以使用线程库 pthread 来创建线程,并使用条件变量来实现阻塞等待线程字符应答的功能。下面是一个简单的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
pthread_mutex_t mutex; // 互斥锁
pthread_cond_t cond; // 条件变量
int response_received = 0; // 是否收到应答
void *thread_func(void *arg) {
// 线程执行的逻辑
printf("等待应答...\n");
pthread_mutex_lock(&mutex); // 加锁
while (!response_received) {
pthread_cond_wait(&cond, &mutex); // 等待条件变量
}
pthread_mutex_unlock(&mutex); // 解锁
printf("收到应答!\n");
return NULL;
}
int main() {
pthread_t thread;
pthread_mutex_init(&mutex, NULL); // 初始化互斥锁
pthread_cond_init(&cond, NULL); // 初始化条件变量
// 创建线程
if (pthread_create(&thread, NULL, thread_func, NULL) != 0) {
fprintf(stderr, "无法创建线程\n");
exit(1);
}
// 模拟收到应答
sleep(2);
pthread_mutex_lock(&mutex); // 加锁
response_received = 1;
pthread_cond_signal(&cond); // 发送条件信号
pthread_mutex_unlock(&mutex); // 解锁
// 等待线程结束
pthread_join(thread, NULL);
pthread_mutex_destroy(&mutex); // 销毁互斥锁
pthread_cond_destroy(&cond); // 销毁条件变量
return 0;
}
```
该示例中,主线程创建了一个子线程,并等待子线程收到应答后才继续执行。子线程通过互斥锁和条件变量实现了阻塞等待的功能。在收到应答后,子线程解锁并继续执行,主线程则等待子线程结束后退出。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)