C语言多变量同时控制一个变量怎么互不影响
时间: 2023-10-11 11:06:42 浏览: 46
在C语言中,多个变量同时控制一个变量,可以使用互斥锁(mutex)来实现互不影响。互斥锁是一种同步机制,可以保证在同一时间只有一个线程能够访问共享资源。
在使用互斥锁时,需要在访问共享变量之前先获取锁,在访问完成后再释放锁。这样就可以保证同一时间只有一个线程能够访问共享变量,从而避免了多个变量同时操作导致的互相影响。
下面是一个使用互斥锁来控制共享变量的示例代码:
```
#include <stdio.h>
#include <pthread.h>
int count = 0; // 共享变量
pthread_mutex_t mutex; // 定义互斥锁
void *thread_func(void *arg) {
int i;
for (i = 0; i < 1000000; i++) {
pthread_mutex_lock(&mutex); // 获取锁
count++; // 对共享变量进行操作
pthread_mutex_unlock(&mutex); // 释放锁
}
return NULL;
}
int main() {
pthread_t thread1, thread2;
pthread_mutex_init(&mutex, NULL); // 初始化互斥锁
pthread_create(&thread1, NULL, thread_func, NULL); // 创建线程1
pthread_create(&thread2, NULL, thread_func, NULL); // 创建线程2
pthread_join(thread1, NULL); // 等待线程1结束
pthread_join(thread2, NULL); // 等待线程2结束
printf("count = %d\n", count); // 输出共享变量的值
pthread_mutex_destroy(&mutex); // 销毁互斥锁
return 0;
}
```
以上代码创建了两个线程,同时对共享变量 `count` 进行操作。在每次对共享变量进行操作之前,都使用 `pthread_mutex_lock()` 函数获取锁,操作完成后再使用 `pthread_mutex_unlock()` 函数释放锁。这样就能够保证共享变量在同一时间只有一个线程在访问,从而避免了多个变量同时操作导致的互相影响。