使用线程互斥锁实现以下功能:主线程和子线程共享一个字符数组作为数据存储区,子 线程接收来自键盘输入的字符串,主线程中读取字符串并输出字符串和字符串的长度。 当主 线程判断收到 end 字符串,则结束程序 。用c语言
时间: 2023-11-27 19:54:53 浏览: 110
以下是使用线程互斥锁实现主线程和子线程共享字符数组的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <string.h>
#define MAX_LENGTH 100 // 字符串数组的最大长度
char data[MAX_LENGTH]; // 共享数据区
pthread_mutex_t mutex; // 互斥锁
int is_end = 0; // 标志是否结束程序
void *child_thread(void *arg) {
while (1) {
pthread_mutex_lock(&mutex); // 加锁
if (is_end) { // 如果标志为结束程序,则解锁并退出
pthread_mutex_unlock(&mutex);
break;
}
printf("Enter a string: ");
fgets(data, MAX_LENGTH, stdin); // 从键盘读取字符串到共享数据区
pthread_mutex_unlock(&mutex); // 解锁
}
pthread_exit(NULL);
}
int main() {
pthread_t tid;
int ret;
pthread_mutex_init(&mutex, NULL); // 初始化互斥锁
// 创建子线程
ret = pthread_create(&tid, NULL, child_thread, NULL);
if (ret != 0) {
printf("Error: cannot create child thread!\n");
exit(EXIT_FAILURE);
}
// 主线程读取共享数据区中的字符串并输出
while (1) {
pthread_mutex_lock(&mutex); // 加锁
if (is_end) { // 如果标志为结束程序,则解锁并退出
pthread_mutex_unlock(&mutex);
break;
}
printf("String: %sLength: %ld\n", data, strlen(data)); // 输出字符串和长度
if (strcmp(data, "end\n") == 0) { // 如果读到 end,则设置标志为结束程序
is_end = 1;
}
pthread_mutex_unlock(&mutex); // 解锁
}
pthread_join(tid, NULL); // 等待子线程结束
pthread_mutex_destroy(&mutex); // 销毁互斥锁
return 0;
}
```
运行程序,可以在命令行中输入字符串,主线程会读取并输出字符串和长度。如果输入了 "end",则程序会结束。注意,输入的字符串末尾必须包含换行符。
阅读全文
相关推荐
















