我正在尝试使用互斥锁使线程等待来自父线程的用户输入。我目前面临的问题是孩子不会等待,即使我有一个互斥锁可以锁定和解锁,然后我也将它加入到父线程中。另外,我目前不确定我的结构是否被正确使用?main() 和 *chthread() 是否使用相同的“锁”实例?我知道,当我在创建线程之前获得用户输入时,它可以工作,但是本练习的要求表明它旨在在创建线程之后传递信息。
#define _GNU_SOURCE
#include <stdio.h>
#include <pthread.h>
#include <errno.h>
#include <string.h>
#include <stdlib.h>
#include <readline/readline.h>
#include <readline/history.h>
# define BUFFER_SIZE 256
void *chthread(void *arg);
struct {
pthread_t pth;
pthread_mutex_t lock;
int ret;
void* ex;
} muinfo;
int main(int argc, char *argv[])
{
//struct mutex args;
char line[BUFFER_SIZE];
char *temp = NULL;
pthread_mutex_init(&muinfo.lock, NULL);
if((pthread_create(&muinfo.pth, NULL, chthread, line)) != 0) {
perror("Problem creating thread");
}
using_history();
temp = readline("enter a string: ");
strcpy(line, temp);
if((pthread_join(muinfo.pth, &muinfo.ex)) !=0) {
perror("Thread join error");
}
free(temp);
pthread_mutex_destroy(&muinfo.lock);
pthread_exit(NULL);
}
void *chthread(void *arg)
{
//struct mutex args;
pthread_mutex_lock(&muinfo.lock);
char *line = (char*)arg;
printf("testing %s\n", line);
pthread_mutex_unlock(&muinfo.lock);
pthread_exit(&muinfo.ret);
//return NULL;
}