设计一个带有mutex的结构体,并举一个使用的例子
时间: 2023-02-09 18:12:14 浏览: 101
Mutex 互斥量使用实例
4星 · 用户满意度95%
这是一个带有互斥量的结构体的例子:
```
#include <pthread.h>
typedef struct {
int value;
pthread_mutex_t mutex;
} Counter;
void init(Counter* c) {
c->value = 0;
pthread_mutex_init(&c->mutex, NULL);
}
void increment(Counter* c) {
pthread_mutex_lock(&c->mutex);
c->value++;
pthread_mutex_unlock(&c->mutex);
}
void decrement(Counter* c) {
pthread_mutex_lock(&c->mutex);
c->value--;
pthread_mutex_unlock(&c->mutex);
}
int get(Counter* c) {
pthread_mutex_lock(&c->mutex);
int value = c->value;
pthread_mutex_unlock(&c->mutex);
return value;
}
```
这是一个使用示例:
```
#include <stdio.h>
#include <pthread.h>
Counter c;
void* increment_counter(void* arg) {
for (int i = 0; i < 1000000; i++) {
increment(&c);
}
return NULL;
}
int main() {
init(&c);
pthread_t thread1, thread2;
pthread_create(&thread1, NULL, increment_counter, NULL);
pthread_create(&thread2, NULL, increment_counter, NULL);
pthread_join(thread1, NULL);
pthread_join(thread2, NULL);
printf("Final counter value: %d\n", get(&c));
return 0;
}
```
在这个示例中,我们创建了一个名为`c`的计数器,然后创建了两个线程来并发地增加计数器的值。互斥量保证了在计数器的值被修改时只有一个线程可以访问它,从而避免了竞争条件。
阅读全文