C语言如何保证一个函数同一时间只被一个函数调用的方法例子
时间: 2023-07-15 17:14:55 浏览: 167
C语言函数调用栈(一)
在C语言中,可以使用互斥锁(mutex)来保证同一时间只有一个线程能够调用某个函数。互斥锁是一种同步机制,它可以确保同一时间只有一个线程能够访问共享资源。
下面是一个使用互斥锁来实现函数同一时间只被一个函数调用的例子:
```c
#include <stdio.h>
#include <pthread.h>
pthread_mutex_t mutex;
void my_function(void)
{
pthread_mutex_lock(&mutex); // 加锁
// 执行函数体
printf("Function is being executed...\n");
pthread_mutex_unlock(&mutex); // 解锁
}
int main()
{
pthread_mutex_init(&mutex, NULL); // 初始化互斥锁
// 创建两个线程分别调用函数
pthread_t tid1, tid2;
pthread_create(&tid1, NULL, (void *)&my_function, NULL);
pthread_create(&tid2, NULL, (void *)&my_function, NULL);
// 等待线程结束
pthread_join(tid1, NULL);
pthread_join(tid2, NULL);
pthread_mutex_destroy(&mutex); // 销毁互斥锁
return 0;
}
```
在上面的例子中,我们定义了一个互斥锁`mutex`,并在函数`my_function`中使用了互斥锁来保证同一时间只有一个线程能够调用该函数。在`my_function`函数中,我们首先调用`pthread_mutex_lock`函数来加锁,然后执行函数体,最后调用`pthread_mutex_unlock`函数来解锁。这样就保证了同一时间只有一个线程能够执行函数体。
在`main`函数中,我们创建了两个线程分别调用`my_function`函数,并使用`pthread_join`函数等待线程结束。最后,我们使用`pthread_mutex_destroy`函数销毁互斥锁。
需要注意的是,在实际应用中,需要根据具体情况选择不同的同步机制来保证函数同一时间只被一个线程调用。互斥锁只是其中一种方式。
阅读全文