以下是书上的一个例子:
请问大侠互斥体和缓冲区BUFFER是个怎样的关系?
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
#include <sys/types.h>
#include <linux/unistd.h>
char buffer[128];
int buffer_has_data = 0;
pthread_mutex_t mutex;
void write_buffer(char *data)
{
pthread_mutex_lock(&mutex);//加锁
if (buffer_has_data == 0)
{
sprintf(buffer, "%s", data);
buffer_has_data = 1;
}
pthread_mutex_unlock(&mutex);//解锁
}
void read_buffer(void)
{
while (1)
{
pthread_mutex_lock(&mutex);//对互斥体加锁
if (buffer_has_data == 1)
{
printf("Read buffer data = %s\n", buffer);
buffer_has_data = 0;
}
pthread_mutex_unlock(&mutex);//对互斥体解锁
sleep(1);
}
}
int main(int argc, char *argv[])
{
char input[128];
pthread_t reader;
pthread_mutex_init(&mutex, NULL);//初始化一个互斥对象
pthread_create(&reader, NULL, (void *)read_buffer, NULL);//创建一个线程
while (1)
{
scanf("%s", input);
write_buffer(input);
}
return 0;
}