23,217
社区成员




#include <stdlib.h>
#include <string.h>
#include <pthread.h>
#include <unistd.h>
struct data
{
pthread_mutex_t lock;
pthread_cond_t cond;
char buff[BUFSIZ];
};
struct data shared_data;
void *writer(void *arg)
{
while (1)
{
pthread_mutex_lock(&shared_data.lock);
pthread_cond_wait(&shared_data.cond, &shared_data.lock);
printf("writer: %s\n", shared_data.buff);
pthread_mutex_unlock(&shared_data.lock);
}
return NULL;
}
int main(int argc, const char *argv[])
{
pthread_t writer_tid;
memset(shared_data.buff, 0, sizeof(shared_data.buff));
pthread_mutex_init(&shared_data.lock, NULL);
pthread_cond_init(&shared_data.cond, NULL);
pthread_create(&writer_tid, NULL, writer, NULL);
while (1)
{
pthread_mutex_lock(&shared_data.lock);
printf("reader: ");
if (fgets(shared_data.buff, BUFSIZ, stdin))
{
pthread_cond_signal(&shared_data.cond);
pthread_mutex_unlock(&shared_data.lock);
}
}
pthread_join(writer_tid, NULL);
return 0;
}