面试题答案
一键面试为确保多线程环境下对结构体 struct data { int value; char text[50]; }
成员变量的读写数据一致性并避免竞态条件,可以使用互斥锁(Mutex)这种同步机制。以下是代码示例:
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
struct data {
int value;
char text[50];
};
pthread_mutex_t mutex;
void* write_data(void* arg) {
struct data* data = (struct data*)arg;
pthread_mutex_lock(&mutex);
data->value = 42;
snprintf(data->text, sizeof(data->text), "Hello, World!");
pthread_mutex_unlock(&mutex);
return NULL;
}
void* read_data(void* arg) {
struct data* data = (struct data*)arg;
pthread_mutex_lock(&mutex);
printf("Value: %d\n", data->value);
printf("Text: %s\n", data->text);
pthread_mutex_unlock(&mutex);
return NULL;
}
int main() {
struct data shared_data;
pthread_t write_thread, read_thread;
pthread_mutex_init(&mutex, NULL);
pthread_create(&write_thread, NULL, write_data, &shared_data);
pthread_create(&read_thread, NULL, read_data, &shared_data);
pthread_join(write_thread, NULL);
pthread_join(read_thread, NULL);
pthread_mutex_destroy(&mutex);
return 0;
}
在上述代码中:
- 定义了
pthread_mutex_t
类型的互斥锁mutex
。 - 在
write_data
和read_data
函数中,通过pthread_mutex_lock
锁定互斥锁,在访问结构体成员变量前后确保同一时间只有一个线程可以访问,访问结束后通过pthread_mutex_unlock
解锁互斥锁。 - 在
main
函数中,初始化互斥锁,创建写线程和读线程,等待两个线程执行完毕后销毁互斥锁。