用c语言自己写一个简单锁
时间: 2024-10-26 08:17:39 浏览: 26
在 C 语言中,我们可以使用低级系统调用来实现一个简单的互斥锁(也称为自旋锁),这里提供一个基于原子操作的基本例子。这个锁使用了 `pthread_mutex_t` 来创建,并通过 `pthread_mutex_lock()` 和 `pthread_mutex_unlock()` 进行锁定和解锁。自旋锁会在获取失败时进入死循环,直到锁被释放。
```c
#include <pthread.h>
#include <unistd.h>
// 自定义锁结构体
typedef struct {
pthread_mutex_t lock; // 使用 pthread 内置的互斥锁
} MyLock;
// 初始化锁
void my_lock_init(MyLock *lock) {
pthread_mutex_init(&lock->lock, NULL);
}
// 锁定锁
void my_lock(MyLock *lock) {
while (pthread_mutex_trylock(&lock->lock)) { // 尝试获取锁
__asm__ volatile ("pause"); // 自旋等待
}
}
// 解锁锁
void my_unlock(MyLock *lock) {
pthread_mutex_unlock(&lock->lock); // 释放锁
}
int main() {
MyLock lock;
my_lock_init(&lock);
// 示例用法
for (int i = 0; i < 5; ++i) {
my_lock(&lock);
printf("Thread %d acquired the lock.\n", getpid());
my_unlock(&lock);
}
return 0;
}
```
阅读全文