写出用互斥锁保证改代码线程安全的代码:typedef struct Node struct Node *next; int value; } Node; void push(Node **top_ptr, Node *n) { n->next = *top_ptr; *top_ptr = n; Node *pop (Node **top_ptr) { if (*top_ptr == NULL) } return NULL; Node *p = *top; *top_ptr = (*top_ptr)->next; return p;
时间: 2023-08-10 13:05:25 浏览: 39
下面是使用互斥锁保证代码线程安全的示例代码:
```c
#include <pthread.h>
typedef struct Node {
struct Node *next;
int value;
} Node;
typedef struct Stack {
Node *top;
pthread_mutex_t mutex;
} Stack;
void push(Stack *stack, Node *node) {
pthread_mutex_lock(&stack->mutex);
node->next = stack->top;
stack->top = node;
pthread_mutex_unlock(&stack->mutex);
}
Node *pop(Stack *stack) {
pthread_mutex_lock(&stack->mutex);
if (stack->top == NULL) {
pthread_mutex_unlock(&stack->mutex);
return NULL;
}
Node *node = stack->top;
stack->top = stack->top->next;
pthread_mutex_unlock(&stack->mutex);
return node;
}
```
在这个示例代码中,我们为 `Stack` 结构体增加了一个互斥锁 `mutex`。在 `push` 和 `pop` 函数中,我们使用 `pthread_mutex_lock` 和 `pthread_mutex_unlock` 函数来对共享资源 `top` 进行保护,保证同一时间只有一个线程会访问共享资源。这样,就可以避免多个线程同时访问共享资源导致的数据竞争问题,保证代码的线程安全性。